因為公司業務有需求建立自己的客服系統體系。在網上尋找了很多資料,因為之前一直做傳統系統沒有進行過這種形式的網絡編程。對SOCKET的理解也僅僅是理論層面的。最后選擇使用 TYW大神的t-io 進行這個開發。考慮到t-io現在是進行文檔收費的方式。其實是可以理解的。畢竟技術的價值很難量化。而技術也需要更多的錢才能發展的更好。這是一個互相促進的過程。我覺着無可厚非。我選擇尊重作者。買了文檔的使用權,同樣也是為了有更多更好好的技術交流圈子。支持TYW大神。廢話不多說了。直接上關鍵代碼和我的思路。
第一步:下載t-io https://gitee.com/tywo45/tio-websocket-showcase (碼雲里的地址)
第二步:項目集成。牽扯到有可能需要用到各種業務處理。先引入 t-io socket 這里選擇了最新的版本。
<dependency>
<groupId>org.t-io</groupId>
<artifactId>tio-websocket-server</artifactId>
<version>3.2.9.v20190401-RELEASE</version>
</dependency>
第三步:由於我的項目里只用到他的web-socket這部分的代碼。所以我直接把這部分代碼拿過來。

在ShowCaseWebSocketStarter 這個類里面有啟動類。因為我們的項目是基於springboot 所以我直接把啟動的代碼拿到springboot啟動類里面和它一起啟動。

第四步:將示例項目的頁面和相關的靜態文件放在項目中。然后調用訪問頁面 index.html 由於之前的項目頁面是springmvc jsp 所以把頁面拿過來改成JSP。方便后續傳值。
第五步:修改 im.js
function initWs (clientuser) {
myid=clientuser.id;
var queryString = 'id='+clientuser.id+'&name='+clientuser.username+'&type='+clientuser.type+"&targetId="+clientuser.targetId;
var param = "";
tiows = new tio.ws(ws_protocol, ip, port, queryString, param, handler, heartbeatTimeout, reconnInterval, binaryType)
tiows.connect()
}
這里根據我的實際業務加了一些參數。執行這個init方法主要是客戶端的握手階段。也就是對應着來到了后端方法的 Handler 的這個 方法

在這里你可以進行自己的業務處理。最關鍵的參數對象就是客戶端的長連接對象。
channelContext,可以使用tio的綁定方法將他綁定到用戶。業務,群組等等。代碼里寫的很清楚這里就不一一列舉了。
如果需要保存上下文數據只需要

注意這里使用有參數的方法。無參數的方法有特殊的用處。不建議使用。
第六步:測試發送消息。可以根據實際業務自由的控制發送消息的接收方。主要是通過綁定用戶業務,比如這里綁定到群組。

則群發的時候就可以這樣

其他綁定方法都一樣。
第七步:業務結束處理。比如可以在聊天結束后將聊天記錄保存至數據庫。這里我做了判斷。只有客戶關閉客戶端的時候進行保存。使用MAP保存了用戶和客服的對應列表。因為了解不到別人是如何做的。這個方法是我想到的比較好的實現了。

總結:t-io的調用方便。能節省開發時間。據了解在高並發和性能方面都是比較好的。靈活的綁定發送功能是亮點。為我們提供了很多可借鑒的思路。感謝TYW大神為我們提供了這么好用的框架。后續會進行更新。第一次寫這種博客。請大家多多拍磚。
