PHP開發客服系統之WebSocket

引言

前面的章節我們大致瞭解了一下開發客服的系統的思路和GatewayWorker,這一小節我們來看一下如何通過WebSocket連接到GatewayWorker。

WebSocket

WebSocket的監聽事件  

Socket.onopen 連接建立時觸發
Socket.onmessage 客戶端接收服務端數據時觸發
Socket.onerror 通信發生錯誤時觸發
Socket.onclose 連接關閉時觸發

WebSocket的方法

Socket.send()

使用連接發送數據

Socket.close()

關閉連接

連接GatewayWorker

查看WebSocket的端口

 知道了Gateway的端口,那現在我們就可以使用WebSocket來連接了

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>WebSocket</title>
	</head>
	<body>
		<script type="text/javascript">
			// 初始化WebSocket
			let socket = new WebSocket('ws://127.0.0.1:8282');

			// 監聽連接事件
			socket.onopen = function(res) {

				// 自定義發送數據格式
				let msg = {
					type: 'init',
					id: '',
					name: ''
				};
				// 發送數據
				socket.send(JSON.stringify(msg));
			};

			// 監聽消息
			socket.onmessage = function(res) {
				console.log(res);
			};

			// 監聽關閉事件
			socket.onclose = function(res) {
				console.log(res);
			};

			// 監聽失敗事件
			socket.onerror = function(err) {
				console.log(err);
			}
		</script>
	</body>
</html>

處理業務邏輯

在客服系統中,訪客和客服即可以發送數據也可以接收數據,另外客服還可以將訪客轉接給其它客服或發起服務評分功能等,對於這些功能我們在WebSocket裏要如何處理呢。上文我們瞭解到WebSocket有一個監聽服務端數據時觸發的事件(onmessage),沒錯,我們就是在此處理服務端發來的數據。

假如我們服務端自定義的數據格式如下

{
    type:'chat',   // 業務類型(根據需求更改)
    data:'hello'   // 需要處理的數據
}

onmessage處理

// 監聽消息
socket.onmessage = function(res) {
	// 將字符串解析成JSON格式
	res = JSON.parse(res);
	// 根據swith語句來處理不同的type事件
	switch (res.type) {
		case 'init':
		// type爲init時需要處理的業務
			break;
		case 'chat':
		// type爲chat時需要處理的業務
			break;
		// ......
	}
};

發送數據

上文我們瞭解到WebSocket有一個發送數據的方法(send),假如我們new的WebSocket對象爲socket,則可以用socket.send()來發送數據,同樣,服務端也要能處理WebSocket發送的業務邏輯,所以可以在發送的data裏帶上上業務類型type。

如下所示:

{
    type:'chat',   // 業務類型(根據需求更改)
    data:'hi'   // 需要處理的數據
}

這樣我們就可以在GatewayWorker的Events.php裏的onMessage方法根據type來處理不同的業務邏輯。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章