使用socket.io和nodejs搭建websocket服务器端
socket.io不仅可以搭建客户端的websocket服务,而且支持nodejs服务器端的websocket。
下面让我来介绍一下怎么安装配置nodejs.
进入http://nodejs.org/#download下载msi文件。一直点next安装。最后文件会自动安装在C:\nodejs目录下。
安装完成后,会自动配置环境环境变量。如果没有自动配置,自己手动在path处加上 ;C:\nodejs\。
安装完成后,需要配置npm来管理node.js的模块。
在window下安装npm需要安装git。
安装完git后,打开gitbush。执行下面几步:
1
2
3
4
5
6
7
|
git config --system http.sslcainfo /bin/curl-ca-bundle .crt git clone --recursive git: //github .com /isaacs/npm .git cd npm node cli.js install npm -gf |
第一个是设置不会有任何提示,第二步会到github上下载npm会有下载文件和进度,第四步是安装npm到node.js会复制几个文件cmd文件和mode_modules文件夹到nodejs目录。
这样就配置好了npm。
如果需要安装什么模块直接输入npm install ***。
没有npm的或者windows用户可以使用github下载socket.io并且放入到node_modules文件夹中,具体配置可以参考文章:《nodejs教程:配置nodejs.exe的windows目录结构》
nodejs安装socket.io
使用node插件管理包,运行下面的命令就可以安装成功socket.io
1
|
npm install socket.io |
用socket.io 实现的一个例子
客户端代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
<html> <head> <title></title> <script src= "../js/socket.io.client.js" ></script> <script type= "text/javascript" > function doit() { var socket = io.connect( 'http://localhost' ); socket.on( 'news' , function (data) {//接收到服务器发送过来的名为 'new' 的数据 console.log(data.hello);//data为应服务器发送过来的数据。 socket.emit( 'my new event' , { my: 'new data' });//向服务器发送数据,实现双向数据传输 }); socket.on( 'other' , function (data) {//接收另一个名为 'other' 数据, console.log(data.hello); socket.emit( 'event1' , { my: 'other data' }); }); } </script> </head> <body> <button id= 'btn' onclick= "doit()" >click me</button> </body> </html> |
socket.io.client.js可以https://github.com/LearnBoost/socket.io-client下载到本地,在<script src="..">指向本机的js库。
服务器用nodejs实现
server2.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
var http= require( 'http' ), io= require( 'socket.io' ), express= require( 'express' ); var app = express.createServer(), io = io.listen(app); app.listen(80); io.sockets.on( 'connection' , function (socket) { socket.emit( 'news' , { hello: 'world' }); //监听,一旦客户端连接上,即发送数据,第一个参数'new'为数据名,第二个参数既为数据 socket.on( 'my other event' , function (data) { //捕获客户端发送名为'my other event'的数据 console.log(data.my); }); socket.emit( 'other' , { hello: 'other world' }); //发送另一个数据 socket.on( 'evnet1' , function (data) { //捕获另外一个数据 console.log(data.my); }); }); |
测试结果,客户端可正常显示
服务器端显示结果:
C:\java\Nodejs>node server2.js
注:代码要和npm_module在同一个目录下。不然会出现找不到socket.io module的错误。