san*_*nal 1 servlets node.js socket.io
我正在考虑在我的项目中使用Socket.IO而不是WebSocket(我目前正在使用它).我还没有使用过Node.js. 当我试图通过Socket.IO时,我认为Node.js是必须实现的.我有几个问题要问.
我正在使用Glass-fish Server.在我的项目中只使用了hibernate,没有使用其他框架,我对其他任何框架都不熟悉.
1)是的.它类似于纯websocket.但是netty-socketio:
使用socket-io协议;
支持内存/ Hazelcast/Redisson存储,用于存储开箱即用的会话;
基于事件模型.您必须将数据发送到套接字
42 ["eventName",your_data_objects]
哪里
@OnEvent处理程序中必须相同 (见下文).您可以根据需要组织your_data_objects,例如,编写类似HTTP的内容:
42["eventName", {headers map}, data(primitive, array or object)]
42["createUser", {"requestId": "UUID"}, {
"firstName": "John",
"lastName": "Dow"
}]
42["deleteUser", {}, 10]
42["getUsers", {}, [1,2,3,4,5]]
Run Code Online (Sandbox Code Playgroud)
等等.
需要通过http连接到
WS://host/socket.io/运输=的WebSocket
(需要运输设置);
您的客户端和服务器之间或在服务器的配置中禁用它(不推荐,它对死会话很有用).
支持握手阶段易于写入授权;
支持房间.您可以加入/离开房间(基于Hazelcast/Redisson的pub/sub)并仅为这些房间发送广播活动;
支持确认回调(可以禁用);
总之,netty-socket-io是非常有用,稳定的仪器,可以用于生产.
2)绝对.您可以在Java后端端使用netty-socket-io.和客户端的socket-io库.甚至是纯粹的websocket:
var ws = new Websocket("ws://localhost:9060/socket.io/?transport=websocket");
setInterval(function(){ sendHeartbeat(); }, 5000);
function sendHeartbeat() {
ws.send("2");
}
ws.onopen = function() {
ws.send('42["doSomething", {"header1": "value1"}, {"key1": "value1"}');
}
Run Code Online (Sandbox Code Playgroud)
Java的:
public class Controller {
@OnEvent("doSomething")
public void doSomething(SocketIOClient client, Headers headers, Something something) {
client.sendEvent("doSomethingSuccess", null, responseHeaders, responseObject);
}
}
Run Code Online (Sandbox Code Playgroud)
并在配置中路由到控制器:
server.addListeners(new Controller());
Run Code Online (Sandbox Code Playgroud)
3)遗憾的是,关于netty-socket-io的信息很少,你可以尝试它并在遇到麻烦时创建新的问题;
4)您需要将netty-socket-io添加到依赖项中.Hazelcast或Redisson如果您打算使用它们存储会话和订阅房间.杰克逊为json序列化/反序列化.就这样.
| 归档时间: |
|
| 查看次数: |
760 次 |
| 最近记录: |