企业做什么需要有网站,网站怎么做图片放映效果,cms建站系统哪个好,品牌建设青之见1、简介
Socket.D 是基于事件和语义消息流的网络应用层协议。底层可以依赖 TCP、UDP、KCP、WebSocket 等传输层协议。其开发背后的动机是用开销更少的协议取代超文本传输协议(HTTP)#xff0c;HTTP 协议对于许多任务(如微服务通信)来说效…1、简介
Socket.D 是基于事件和语义消息流的网络应用层协议。底层可以依赖 TCP、UDP、KCP、WebSocket 等传输层协议。其开发背后的动机是用开销更少的协议取代超文本传输协议(HTTP)HTTP 协议对于许多任务(如微服务通信)来说效率低下。
2、Socket.D 的集群应用
在 Socket.D 的集群故事里会有三个角色
请求者经理人或者中间人响应者
客户端通过 url 连接经理人后就会成为集群的一部分。它可以是请求者也可以是响应者。
sd:tcp://127.0.0.1:8602?demoappurl 会包括
协议头sd 表示 socket.d 协议tcp 表示传输方案地址与端口路径还有参数这个参数会申明自己的应用名字。连接经理人时也相当于完成身份注册了。
在集群内部相互间通过 At 进行发起向“响应者”的请求。就像
session.send(test, new StringEntity(hello).at(demoapp));3、集群的四种转发
在集群的活动中请求者会发消息给经理人经理人根据 at name 再转发给相应的响应者。
四种转发方式单播单播!组播广播
at描述备注demoapp单播给叫这个名的其中一个会话发使用 平均轮询 “负载均衡”策略demoapp!单播!给叫这个名的其中一个会话发使用 ip_hash “负载均衡”策略demoapp*组播给叫这个名的整组会话发如果自己也叫这个名则自己除外*广播给集群里的全部会话发自己除外
通过at方式进行转发示例
session.send(test, new StringEntity(hello).at(demoapp));
session.send(test, new StringEntity(hello).at(demoapp!));
session.send(test, new StringEntity(hello).at(demoapp*));
session.send(test, new StringEntity(hello).at(*));4、演示
假设经理人或者中间人 的服务地址为127.0.0.1:8602。下面以 Java 语言展示效果
创建经理人
public class BrokerDemo {public static void main(String[] args) throws Exception {SocketD.createServer(sd:tcp).config(c - c.port(8602).fragmentHandler(new BrokerFragmentHandler())).listen(new BrokerListener()).start();}
}创建响应者自己不需要端口启动连接经理人后即可提供服务
public class ResponderDemo {public static void main(String[] args) throws Exception {//连接到 broker 并给自己命名为demoappClientSession session SocketD.createClient(sd:tcp://127.0.0.1:8602?demoapp).listen(new EventListener().doOn(/hello, (s,m)-{//监听 /hello 事件如果是请求则答复if(m.isRequest()){s.reply(m, new StringEntity(me too!));}})).open();}
}创建请求者
public class RequesterDemo {public static void main(String[] args) throws Exception {//连接到 broker 并给自己命名为demotesterClientSession session SocketD.createClient(sd:tcp://127.0.0.1:8602?demotester).open();//发送消息并要求转发给 demoappsession.sendAndRequest(/hello, new StringEntity().at(demoapp)).thenReply(r-{//收到答复后打印结果print(r.dataAsString());});}
}