记websocket(windows系统下nodejs,node-websocket-server实现简单聊天)

websocket原理这里不再叙述,网上文章很多。


这里主要说一下我配置的过程。

nodejs的安装过程:下载地址直接安装就OK了

我直接按默认目录来安装的。

安装完之后安装websocket-server(现在新版本的nodejs支持在windows系统上直接运行upm及node命令)

在项目目录下在运行态输入如下的命令(注意是在项目目录下)

npm install websocket-server

现在nodejs与websocket-server已经安装完毕。

将服务器端写在某个js中

var conns = new Array();  
 var ws = require('websocket-server');  
 var server = ws.createServer();  
 server.addListener('connection', function(conn)
 {  
     console.log('connection....');  
     conns.push(conn);  
     conn.addListener('message',function(msg)
	 {  
         console.log(msg);  
         for(var i=0; i
客户端,代码如下:






昵称:
内容:
目录结构如下:



在运行台中输入如下命令,开启服务器:



在safari浏览器中调试。

不要使用谷歌浏览器,会出现如下的错误:Error during WebSocket handshake: 'Sec-WebSocket-Accept' header is missing

原因如下:

因为websocket协议已经更新到13版本。

客户端发送数据格式类似这样:

GET /demo HTTP/1.1
Host: example.com
Connection: Upgrade
Sec-WebSocket-Key2: 12998 5 Y3 1  .P00
Sec-WebSocket-Protocol: sample
Upgrade: WebSocket
Sec-WebSocket-Key1: 4 @1  46546xW%0l 1 5
Origin: http://example.com
^n:ds[4U

服务端返回的信息是:

HTTP/1.1 101 WebSocket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Origin: http://example.com
Sec-WebSocket-Location: ws://example.com/demo
Sec-WebSocket-Protocol: sample
8jKS’y:G*Co,Wxa-

但是之前的版本是这样的:

客户端发送数据格式类似这样:

GET /chat HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: www.zendstudio.net:9108
Origin: http://www.zendstudio.net
Cookie: somenterCookie

此时服务端应该返回的信息是:

HTTP/1.1 101 Web Socket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
WebSocket-Origin: http://www.zendstudio.net
WebSocket-Location: ws://www.zendstudio.net:9108/chat

从这里我们太容易看出来,websocket协议的握手部分根本就是个类http的协议,所不同的是http每次都会有这样子的头信息交互,这在某些时候不得不显得很糟糕。而websocket只会执行一次这个过程,之后的传输信息就变得异常简洁了。

这里我们发现,version 13这个版本的websocket协议,与之前版本最大不同就是多了一个验证,客户端会发送一个“Sec-WebSocket-Key”的base64编码的密钥,要求服务端必须返回一个“Sec-WebSocket-Accept”,否则客户端会抛出一个“Error during WebSocket handshake: Sec-WebSocket-Accept mismatch”错误之后,关闭连接,当然,这个Sec-WebSocket-Accept的值是计算出来的。


谷歌14版本+支持新的标准,而websocket-server是按原来的版本写的。火狐也有类似的原因。

运行结果如下:



参考文章:点击

你可能感兴趣的:(webIM)