之前一直用socket.io实现客户端,和服务端之间的交互,最近需要把一个node服务获取到的数据传到另一个node服务上,但是又不能依靠前端。所以我试着把发送数据的服务作为前端来和接受数据的服务做交互,没想到居然可以实现,下面是我的代码,仅供参考:
作为前端的服务:
var io = require('socket.io-client'); var socket= io.connect('http://localhost:0000'); socket.emit('a',{a:'1'})
作为后端的服务:
var express = require('express'); var app = express(); var server = require('http').Server(app); var io = require('socket.io')(server); io.on('connection', function (socket) { socket.on('a', function (data) { console.log(data) },function(error){ console.log(error) }); }); server.listen(0000);
这两者的不同就在于require的IO不同,一个用到的是socket.io-client,一个用服务端的socket.io。
下面我总结了一些socket的方法:
1.在一个服务端接收多个客户端时,客户端可以加上特有的参数query传给服务端来识别唯一的客户端:
var socket= io.connect('http://localhost:0000',{query:"data=a"})//客户端 socket.emit('a')
io.on('connection', function (socket) { var data = socket.handshake.query.data//这里data的值就是a socket.on(''+data,function(results){ console.log(results) }) }) //服务端
2.当客户端socket.disconnect()时,服务端:
io.on('connection', function (socket) { socket.on('disconnect', function () { console.log( socket.handshake.query.data)//这里可以监听到的关闭的客户端 }) })