欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PHP开发客服系统之WebSocket

程序员文章站 2022-05-19 20:56:36
...

引言

前面的章节我们大致了解了一下开发客服的系统的思路和GatewayWorker,这一小节我们来看一下如何通过WebSocket连接到GatewayWorker。

WebSocket

WebSocket的监听事件  

open Socket.onopen 连接建立时触发
message Socket.onmessage 客户端接收服务端数据时触发
error Socket.onerror 通信发生错误时触发
close Socket.onclose 连接关闭时触发

WebSocket的方法

Socket.send()

使用连接发送数据

Socket.close()

关闭连接

连接GatewayWorker

查看WebSocket的端口

PHP开发客服系统之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来处理不同的业务逻辑。