日期:2014-05-17  浏览次数:20812 次

WebSocket的相关难题
小弟初接触网络通信相关,学习了WebSocket的C#服务端,有些疑问还请前辈们赐教。谢谢了!
1.下面的代码是服务端将内容发向客户端的,不明白为什么要这样组织(尤其是中间那判断长度的处理),直接Encoding.UTF8.GetBytes(str)为什么不行?
2.从示例中理解,服务端的Socket接受到客户端的连接,然后读取第一个请求内容,做HTTP内容解析,内容符合后,返回一个HTTP文字内容,这期间都是TcpSocket直接的连接,然后内容传输,那HTTP内容那段感觉多余样的,而我看了一些WebSocket的文章好像是说先HTTP请求握手,然后TCP连接,既然HTML5能进行TCP连接,为什么会多出那么一个HTTP请求握手呢?
3.看到一些文章说TCP连接,是可靠的,如果数据到达接收端,不完整或乱序,会让发送端重发,但这样就阻碍了下面信息的发送,能否有什么方法取消这种可靠呢?让数据包允许丢失呢?(UDP的话就好像跳出WebSocket的范围了)

        public static byte[] GetBytesByStr(string str) {
            byte[] dataBytes = Encoding.UTF8.GetBytes(str);
            int length = dataBytes.Length;

            byte[] extendBytes;
            byte[] headBytes;
            if (length < 126) {
                extendBytes = new byte[0];
                headBytes = GetHeadBytes(true, false, false, false, OpCode.Text, false, length);
            } else if (length < 65536) {
                extendBytes = new byte[2];
                headBytes = GetHeadBytes(true, false, false, false, OpCode.Text, false, 126);
                extendBytes[0] = (byte)(length / 256);
                extendBytes[1] = (byte)(length % 256);
            } else {
                extendBytes = new byte[8];
                headBytes = GetHeadBytes(true, false, false, false, OpCode.Text, false, 127);
                int left = length;
                int unit = 256;