Socket.D 协议?
Socket.D 是一个网络应用协议。在微服务、移动应用、物联网等场景,可替代 http、websocket 等。协议详情参考《官网介绍》。
-
支持: tcp, udp, ws, kcp 传输。
-
目前:java,kotlin,javascript,node.js,python,android 语言环境可用。go,rust,c/c++,.net 正在开发中。
最近更新
- 优化 python 协议跨语言编码解兼容
- 优化 python 异步栈的日志记录
for Python Helloworld 演示
- Server
async def main():
server = await (SocketD.create_server("sd:ws")
.listen(EventListener()
.do_on_open(lambda s:
#会话打开时
log.info(s.session_id())
).do_on_message(lambda s, m:
#收到任意消息时(方便做统一的日志打印)
log.info(m.data_as_string())
).do_on("/demo", lambda s, m:
#收到"/demo"事件的消息时。如果是请求或订阅?则进行签复
(m.is_request() or m.is_subscribe()) and s.reply_end(m, StringEntity("And you too."))
)).start())
await asyncio.Future()
if __name__ == "__main__":
asyncio.run(main())
- Client
async def main():
#打开客户端会话,并监听(用 url 形式打开)
session = await (SocketD.create_client("sd🇼🇸//127.0.0.1:8602/?token=1b0VsGusEkddgr3d")
.open())
entity = StringEntity("Hello wrold!").meta_put("sender","noear")
#发送
session.send("/demo", entity)
#发送并请求(且,等待一个答复。否则超时异常)
session.send_and_request("/demo", entity).then_reply(lambda reply:
#打印
log.info(reply.data_as_string())
).then_error(lambda error:
log.error(error)
)
#发送并订阅(且,接收零个或多个答复流)
session.send_and_subscribe("/demo", entity).then_reply(lambda reply:
#打印
log.info(reply.data_as_string()) or (reply.is_end() and log.info("the end!"))
)
await asyncio.Future()
if __name__ == "__main__":
asyncio.run(main())
视频演示效果:
- for H5
- https://www.bilibili.com/video/BV1ck4y197BV/
- 演示源码
- for UniAPP
- https://www.bilibili.com/video/BV1T94y1T7sp/
- 演示源码
代码仓库:
- https://gitee.com/noear/socketd
- https://github.com/noear/socketd
官网:
- https://socketd.noear.org