WebScoket是一种让客户端和服务器之间能进行双向实时通信的技术。它是HTML最新标准HTML5的一个协议规范,本质上是个基于TCP的协议,它通过HTTP/HTTPS协议发送一条特殊的请求进行握手后创建了一个TCP连接,此后浏览器/客户端和服务器之间便可以通过此连接来进行双向实时通信。
socket.io
是基于
Node.js
和
WebSocket
协议的实时通信开源框架,它包括客户端的JavaScript和服务器端的Node.js。WebSocket是SocketIO的一个子集。
emit 和 on
Socket.IO服务器具有一个sockets属性,属性值为所有与客户端建立连接的socket对象。
可以利用该对象的send方法或者emit方法向所有客户端广播消息。emit
和
on
是最重要的两个 API,分别对应
发送
和
监听
事件。我们可以非常自由的在服务端定义并发送一个事件
emit
,然后在客户端监听
on
,反过来也一样。
emit的使用方式
搭一个server服务器
var server = require('http').createServer((req, res) => {
res.end("111")
var io = require('socket.io')(server);
server.listen(9002);
在发生特定情况时发送一个action命令
a)命令可以只有一个名字
io.emit('自命名')
b)命令可以除了名字还有数据
io.emit('自命名',a)
c)命令可以除了名字还有多个数据
io.emit('自命名',a,b,c,...,d)
d)命令可以除了名字还有回调函数
io.emit('自命名',data,function(a,b){ } )
此时对应接收数据的地方应该建议与socket的链接
var socket = io('http://localhost:9002');
socket.on('msg', function (msg) {
location.reload();
此时的socket.on与上述2一一对应
a)命令可以只有一个名字
socket.on('自命名',function(){ } )
b)命令可以除了名字还有数据
socket.on('自命名', function(data){ } )
c)命令可以除了名字还有多个数据
socket.on('自命名', function(a,b,c,...,d){ } )
d)命令可以除了名字数据还有回调函数
socket.on('自命名', function(data,fn){ fn(a,b); })
emit的常见用法
io.on('connect', onConnect);
function onConnect(socket){
// 只发给sender。 sending to the client
socket.emit('hello', 'can you hear me?', 1, 2, 'abc');
// 发给所有人,除了sender。 sending to all clients except sender
socket.broadcast.emit('broadcast', 'hello friends!');
// 发给game房间所有人,除了sender。 sending to all clients in 'game' room except sender
socket.to('game').emit('nice game', "let's play a game");
// 发给game1和/或game2所有人,除了sender。 sending to all clients in 'game1' and/or in 'game2' room, except sender
socket.to('game1').to('game2').emit('nice game', "let's play a game (too)");
// 发给game房间所有人,包含sender。 sending to all clients in 'game' room, including sender
io.in('game').emit('big-announcement', 'the game will start soon');
// 发给域名myNamespacs所有人,包含sender。 sending to all clients in namespace 'myNamespace', including sender
io.of('myNamespace').emit('bigger-announcement', 'the tournament will start soon');
// 发给域名myNamespace里room房间的所有人,包含sender。 sending to a specific room in a specific namespace, including sender
io.of('myNamespace').to('room').emit('event', 'message');
// 发给某一个人 sending to individual socketid (private message)
io.to(`${socketId}`).emit('hey', 'I just met you');
详情链接:https://blog.csdn.net/nathanhuang1220/article/details/41348213?utm_source=blogxgwz1
WebScoket是一种让客户端和服务器之间能进行双向实时通信的技术。它是HTML最新标准HTML5的一个协议规范,本质上是个基于TCP的协议,它通过HTTP/HTTPS协议发送一条特殊的请求进行握手后创建了一个TCP连接,此后浏览器/客户端和服务器之间便可以通过此连接来进行双向实时通信。socket.io是基于Node.js和WebSocket协议的实时通信开源框架,它包括客户端的JavaScript和服务器端的Node.js。WebSocket是SocketIO的一个子集。emi...
socket.emit()
作用: 服务器端和客户端之间可以使用socket端口对象的emit方法,互相发送事件。
socket.emit(event,data,[callback])
event: 参数值为一个用于指定事件名的字符串,如"connect"
data: 代表该事件中携带的数据。这个数据就是要发送给对方的数据。数据可以是字符串,也可以是对象。
callback: 值为一个参数,用于指定一个当对方确定接收到数据时调用的回调函数
一方使用emit发送事件后,另一方可以使用on,或者once方法,
socket.emit('action');表示发送了一个action命令,命令是字符串的,在另一端接收时,可以这么写: socket.on('action',function(){...});
socket.emit('action',data);表示发送了一个action命令,还有data数据,在另一端接收时,可以这么写: socket.on('action',function(data){
1.socket.emit(‘action’);表示发送了一个action命令,命令是字符串的,在另一端接收时,可以这么写: socket.on(‘action’,function(){…});
2.socket.emit(‘action’,data);表示发送了一个action命令,还有data数据,在另一端接收时,可以这么写: socket.on(‘action’,function(data)...
1.socket.emit(‘action’);表示发送了一个action命令,命令是字符串的,在另一端接收时,可以这么写: socket.on(‘action’,function(){…});
2.socket.emit(‘action’,data);表示发送了一个action命令,还有data数据,在另一端接收时,可以这么写: socket.on(‘action’,function(data){…});
3.socket.emit(action,arg1,arg2); 表示发送了一个action命令,还
emit可以很方便的发送数据,例如:
socket.emit('action');表示发送了一个action命令,命令是字符串的,在另一端接收时,可以这么写: socket.on('action',function(){...});
socket.emit('action',data);表示发送了一个action命令,还有data数据,在另一端接收时,可以这么写: socket.on('act
@socketio.on('my_event')
def handle_my_custom_event(message):
emit('my_event',json,namespace='/chat')
function onConnect(socket){ // 给本次连接的客户端发消息
socket.emit('hello', 'can you hear me?', 1, 2, 'abc'); // 给除了本次连接的其他所有连接者发消息
socket.broadcast.emit('broadcast', 'hello friends!'); // 给除了本次连接者之外的所有gam
socket.socket(socket.AF_INET, socket.SOCK_STREAM)和socket.socket(socket.AF_INET, socket.SOCK_GREAM)的区别
`socket.socket(socket.AF_INET, socket.SOCK_STREAM)`创建的是一个面向流的TCP套接字,它提供了可靠的、有序的、基于字节流的双向连接,适用于一对一的数据传输。
`socket.socket(socket.AF_INET, socket.SOCK_DGRAM)`创建的是一个无连接的、不可靠的、基于数据包的UDP套接字,它不保证数据的可靠传输和顺序传输,适用于一对多的数据广播或者实时通信。