重庆手机版建站系统信息,关于小城镇建设的网站,网站策划及过程,为什么做的网站有的有弹窗有的没有socket.d.js 是基于 websocket 包装的 socket.d 协议的实现。就是用 ws 传输数据#xff0c;但功能更强大。
功能原生 websocketsocket.d说明listen有有监听消息send有有发消息sendAndRequest无有发消息并接收一个响应#xff08;类似于 http#xff09;sendAndSubscribe无…socket.d.js 是基于 websocket 包装的 socket.d 协议的实现。就是用 ws 传输数据但功能更强大。
功能原生 websocketsocket.d说明listen有有监听消息send有有发消息sendAndRequest无有发消息并接收一个响应类似于 httpsendAndSubscribe无有发消息并接收多个响应也叫订阅event(or path)无有消息有事件或路径可对消息进行业务路由meta(or header)无有消息有元信息或头信息可为数据标注业务语义自动心跳无有断开后自动重链无有
下面感受下开发方面的差异
1、客户端示例代码
使用时可以根据自己的业务对原生接口包装进一步简化使用。
script srcjs/socket.d.js/script
script
async function init(){//构建事件监听const eventListener await SocketD.newEventListener().doOnMessage((s,m){//监听所有消息可能不需要}).doOn(/im/user.upline, (s,m){ //事件的应用//监听用户上线let user_id m.meta(user_id);}).doOn(/im/user.downline, (s,m){//监听用户下线let user_id m.meta(user_id); //元信息的应用});//创建单例window.clientSession SocketD.createClient(sd:ws://127.0.0.1:8602/?uap2).listen(eventListener).open();
}function join(){clientSession.sendAndRequest(/user/join, SocketD.newEntity()).thenReply(r-{//加入成功});
}init();
/scriptSocket.D 有三个发消息的接口
接口说明send像 websocket。多了事件与元信息属性sendAndRequest像 httpsendAndSubscribe像 reactive stream 。多了事件与元信息属性
2、服务端示例代码用 java 演示
public class Demo {public static void main(String[] args) throws Throwable {ListSession userSessions new ArrayListSession();//创建监听器Listener listener new EventListener().doOnOpen(s-{//鉴权if(a.equals(s.param(u)) false){s.close();}else{//加入用户表s.attrPut(user_id, s.param(u));userSessions.add(s);}}).doOn(/user/join, (s,m)-{if(m.isRequest()){s.reply(m, new StringEntity());}for(Session s1: userSessions){//告诉所有用户有人上线s1.send(/im/user.upline, new StringEntity().metaPut(user_id), s.attr(userId));}});//启动服务SocketD.createServer(sd:ws).config(c - c.port(8602)).listen(listener).start();}
}3、Socket.D 是什么东东
Socket.D 是一个基于“事件”和“语义消息”“流”的网络应用层协议听起来好像很 ao 口。支持 tcp, udp, ws, kcp 传输有各种不同语言的实现。有用户说“Socket.D 之于 Socket尤如 Vue 之于 Js、Mvc 之于 Http”。
协议之所有强大有三个关键基础因素
事件语义消息流
它的帧码结构
[len:int][flag:int][sid:str(64)][\n][event:str(512)][\n][metaString:str(4k)][\n][data:byte(16m)]因为是应用层协议所以可以建立在任意传输层协议之上。比如 websocket。
4、开源仓库
github: https://github.com/noear/socket.dgitee: https://gitee.com/noear/socket.d