WebSocket
服务基于socket.io
。
如何使用
Javascript客户端(index.html)
<script src="/javascripts/socket.io.slim.js"></script>
<script>
var socket = io('http://192.168.4.94:3000'[, options]);
console.log(socket.id); // undefined
socket.on('connect', () => {
console.log(socket.id); // 'G5p5...'
});
</script>
由于 socket.io
本身的特性,决定它无法使用原生HTML5
的WebSocket
连接方式来连接。以下为官网的说明,可点击此处查看更多详情。
Socket.IO is NOT a WebSocket implementation. Although Socket.IO indeed uses WebSocket as a transport when possible, it adds some metadata to each packet: the packet type, the namespace and the ack id when a message acknowledgement is needed. That is why a WebSocket client will not be able to successfully connect to a Socket.IO server, and a Socket.IO client will not be able to connect to a WebSocket server either.
几个事件
示例代码中,默认
WebSocket
连接对象为socket
。
监听事件
- connect
在连接服务成功(包括成功重新连接)后触发。
socket.on('connect', () => {
// ...
});
// 注意:不要在 connect 事件中注册事件
// 防止重连时重复注册事件
socket.on('myevent', () => {
// ...
});
- connect_error
当连接服务出错时触发。
socket.on('connect_error', (error) => {
// ...
});
- reconnect_failed
当重连次数超过设定的次数后触发。
socket.on('reconnect_error', (error) => {
// ...
});
- user_list
当有新用户连入服务时触发,将返回当前连接服务的所有用户信息。
socket.on('user_list', function (data) {
console.log('user_list');
console.log(data);
});
- receive_message
当接收到其他用户推送的消息时,将触发该事件。
socket.on('receive_message', function (data) {
console.log('receive_message');
console.log(data);
});
接收到的数据(data
),数据结构如下:
-
data
(Object) 推送的消息内容 -
selfToken
(String) 推送消息的用户的token
-
userName
(String) 推送消息的用户姓名
主动触发事件
- user_login
获取到相关的用户信息后,向服务注册用户信息。
js true <![CDATA[socket.emit('user_login', { plat: plat, // 所在平台,暂时没有限制平台名称,可选值为 web 、android... socketId: socket.id, // WebSocket 的唯一标识符。connect事件触发后可得到,并在reconnect事件发生后更新。 tokenId: tokenId, // 自定义的用户唯一标识 userName: userName // 用户名称 }[, function (data) { // 可选参数 // 得到成功推送消息给服务器的消息 console.log(data); }]);]]>
在不同平台连接服务时,请填写对应的平台标识。tokenId
可取用户的主键(F_UserId
)。
- sendMsg
向指定用户推送消息。
js true <![CDATA[socket.emit('sendMsg', { tokens: [tokenId1,tokenId2,...], // 消息推送对象的 tokenId 数组 data: msg, // 推送的消息内容,可以为字符串,也可以为 Object 对象... selfToken: tokenId //推送者的 tokenId }[, function (data) { // 可选参数 // 得到成功推送消息给服务器的消息 console.log(data); }]);]]>
点击此处查看更多预设事件。
接口
- [
POST
] /api/sendMsg
向指定用户推送消息。
参数
字段 | 类型 | 描述 |
---|---|---|
tokens | String[] | 消息推送对象的tokenId 数组 |
data | Object | 推送的消息内容,可以为字符串,也可以为Object 对象... |
selfToken | String | 推送者的tokenId |
请求结果
字段 | 类型 | 描述 |
---|---|---|
responseCode | Number | 消息推送响应状态码 |
data | String | 成功返回的消息 |
其他语言客户端连接
- Java: https://github.com/socketio/socket.io-client-java
- C++: https://github.com/socketio/socket.io-client-cpp
- Swift: https://github.com/socketio/socket.io-client-swift
- Dart: https://github.com/rikulo/socket.io-client-dart
- Python: https://github.com/miguelgrinberg/python-socketio
- .Net: https://github.com/Quobject/SocketIoClientDotNet