Socket.D 協議?
Socket.D 是一個網絡應用協議。在微服務、移動應用、物聯網等場景,可替代 http、websocket 等。協議詳情參考《官網介紹》。
-
支持: tcp, udp, ws, kcp 傳輸。
-
目前:java,kotlin,javascript,node.js,python 語言環境可用。go,rust,c/c++,.net 正在開發中。
for Java 更新
- 調整 本端會話關閉時,也觸發本端的 onClose 事件
- 優化 ws 連接控制,避免非法惡意空連
- 優化 socketd-transport-java-kcp 服務端停止處理(添加延時,確保指令發送完成)
- 優化 socketd-transport-java-tcp 在某些操作系統下空跑可能 cpu 過高的問題
for JavaScript/Node.js 更新
- 調整 本端會話關閉時,也觸發本端的 onClose 事件
- 優化 ws 連接控制,避免非法惡意空連
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())
- Client
async def main():
#打開客戶端會話,並監聽(用 url 形式打開)
session = await (SocketD.create_client("sd:ws://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!"))
)
視頻演示效果:
- for H5
- for UniAPP