# WebsocketChatRoom **Repository Path**: Tentails/websocket-chat-room ## Basic Information - **Project Name**: WebsocketChatRoom - **Description**: 基于websocket、ws的聊天室 - **Primary Language**: JavaScript - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-02-25 - **Last Updated**: 2024-07-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 多人聊天室 ### Description 基于WebSocket的多人多房间实时聊天室 ### Software Architecture #### 服务端 基于Node.js + ws库启动一个WebSocket服务器 #### 客户端 Vue.js搭建用户界面 原生WebSocket完成聊天室逻辑 ### Installation #### 服务端 1. cd server 2. npm i 3. npm run start #### 客户端 1. npm install -g live-server 2. live-server --port 9000 3. 打开 http://127.0.0.1:9000/client/index.html ### 核心逻辑介绍 #### 鉴权 ##### 服务端 ![image](data:image/png;base64,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QjrmhL4Ypy6cv/e97y0eeOCBsiVyVBfW9adV3bVJadmyZcXy5cuLBQsWDPpx5513lmOLYtOmTcUxxxwzGKf2QBv63xjCOSaNwvqLXvSiGcf0XIR1fXjEiSeeOO0crWGeXts4nec3btxYjskfIR1JXX/99bXh/H3ve1/x4IMPli0xCc4+++zKsK67NanCukK3voRp3bp1U691QrcTuQV0C+bha6CK3n5HOMeku+SSS+Y8rFsAtxsreqw7n1e9zh0hHUnceOONjeHcfuAwmc4666zasK67NrNJgduHbh1r8+fPn3rUCT88ofvxgKe33xHO0TcK6zvttNOMYz5FWFfo1o0T3UARnat1zta52z83dqNF000CQjpm1U033dQYztevX1+2RB/UhXXdrdGFYDY0hfTwAiA68S9atIiQjgG9/Y5wjr77whe+UOy4444zfgZmM6w3hfS6Gyo63xPSgQa33HJLYzh/6KGHypboozPPPLMyrOtuzbjDOiEdsb7zne8QzoGAzpupwjohHRij1atXN4bzRx55pGwJFMUZZ5xRGdZ1AdBdm3FoCum83QVV9Bc+wjnQTEF4hx12mPEzMs6w3hTS/XOjdmpPSAecNWvWNIbz7373u2VLYKYVK1bUhvXNPdk2hXQ7odv48DX6RX/hI5wDo7noootmLaw3hXTReH+jJXydO0I6NosuWk3h/NFHHy1bout0cqvajyp/p2I21YV1XQB0IYjRFNLFgrkti4DeP/oLXx/CuX6Oq9bR17CAo3n40DSMzisq0c+cPk5P09rP3bBzy6jL6yqdV/x20CeUxGx/vz27RufoF77whTPWaXPCuta1KaSL2tiyJimgCyEdUYaF8+9973tly/7SiSLle5vDi1kYTj070dk+q7sIapguqqnWwfzd3/1dZVjXBSA2rGNy6b3jMfQXvj7dOR8WeHVe0PimkOPDZh0tp2qbNlVduGqzPGk631Wxc2DT9qgzyrnWtF2PYTSPccxnNl144YVjD+t9RUjHSIaF83/5l38pW0IXgS6HdLsY++nUXq+NbzcXTj/99OIP/uAPZhxrugDoQgDI3nvvXSxZsqR1WNdNhD6+raVNePZhuemOb12FYduHSs2v6U76OJbXlvqk5Wt634c2/DlTms61Gh72uc3y1L9wumFV14e5onP0C17wghn9JKy3R0hHK8PC+Q9+8IOy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QjqQUBjSAQAAqhDSgYQI6QAAoA1COpAQIR0AALRBSAcSIqQDAIA2COlAQoR0AADQBiEdSIiQDgAA2iCkAwkR0gEAQBuEdCAhQjoAAGiDkA4kREgHAABtENKBhAjpAACgDUI6kBAhHQAAtEFIBxIipAMAgDYI6UBChHQAANAGIR2YZY8//nj5jJAOAADaIaQDs+zDH/7wIJjX1Wtf+9qyNQAAACEdSOIpT3lKZThXbbHFFmUrAACA3yKkAwk03U3nLjoAAAgR0oFEqu6mcxcdAABUIaQDiVTdTecuOgAAqEJIBxLyd9O5iw4AAOoQ0oGE/N107qIDAIA6hHQgwkMPPVTceOONxcqVK4tPfepTxbJly4pTTz21VW255ZbFE57whMpxdfWJT3yiOOuss4prr722uO+++8peAACASUVIB1r48Y9/XJxzzjnFoYceWmy99daDu+FzVb/7u79bvOY1ryn++q//unj44YfLXgIAgElBSAca3H777cWiRYsqg3KX6g//8A+L6667ruw1AADIHSEdqHDPPfcUb3zjGysDserZz3528epXv7pYvHhx8cEPfrA4+eSTZ7X+4i/+ojjmmGOmwvjzn//8yj6pDj744OK2224r1wIAAOSKkA4E9P7vqgD8qle9qlixYkWxfv36suXc2bBhQ3H++ecXb3jDGyr7+r73va9sCQAAckRIB0q/+MUvKu+eH3300cXatWvLVt3z6KOPFn/+538+o9/77bcf71cHACBThHTgN370ox8V++yzz7SQqzvnX//618sW3ffII48Uhx9++LR1eO5zn1t885vfLFsAAIBcENLRe48//nix1157TQu3+jzzXJ155pnT1uWZz3xmce+995ZjAQBADgjp6D39M6YPtRdccEE5Jl8333xz8dSnPnWwTrvttlvx85//vBwLAAC6jpCOXjvppJOmBfQLL7ywHJO/NWvWFFtsscVg3d785jeXYwAAQNcR0tFbd9xxx7SA/slPfrIcMzm+8IUvTFvHiy66qBwDAAC6jJCO3tLnnFt41TeJTqr3vOc9g/V84QtfWA4FAABdRkhHL+k92xZcVd/5znfKMZPnP//zP4ttt912sK5nnXVWOQYAAHQVIR29dNhhhw1C69KlS8uhk+u0004brO+ee+5ZDgUAAF1FSEfv6CMXLbCq7r///nJMvXXr1hXz58+fevQ2bdo09XX9d955Zzmk2caNG4tFixbNmE9I89N8NX9Ns2DBgml99qVxatNEd9P9p73w2ekAAHQbIR29c/nllw/Cqr6VcxgF5RNPPHEQrJctWzaYvqrmzZs39XYaPVaNryu1t2WEIV3PhwXxYY488sjBsj72sY+VQwEAQBcR0tE7733vewdh9eSTTy6H1lMoV2iuums+7jvpGh6G++XLlw+WURX81b829MkuNs0f/dEflUMBAEAXEdLRO/5TXa6//vpyaLWLL7540FYVBuKmkG7j/PR1pXZqbzQ/GxbeSR/1FwOjXwBsec973vPKoQAAoIsI6eidnXbaaRBWH3zwwXJoMx+aq+52+7J2VWG66k66nuvtNGpv7C01Wo4te3ND+v/+7/9O6+evf/3rcgwAAOgaQjp6Z5ttthkE1Z/85Cfl0HrD3qJSJzakq43+GVTTrl27dmqcnq9fv77yH0h1t7+trbbaajDdT3/603IoAADoGkI6emeUkG5Be9WqVYOAvHr16qlhNo+wLDTbtFVtwlI7C+maXnfSbZhCu55v7p10efrTnz5YJiEdAIDuIqSjd0Z5u4vucustJ/5jDhWS/ae9eArXdXe27Q65lqt5Vk2vNpqH/SIwzpAevt1FrwEAQDcR0tE7hxxyyCCo3nDDDeXQ9mJCuoYpoOstK3q7i97GoqAdttU8Nc7eh+5Duj7lxYdsK/8LRBPN26bZbrvtyqEAAKCLCOnonRNOOGEQVtt8BKMoNNs0K1eubB3S9VzT2DCFaf+edBsf3hWvCultgngTPoIRAIB8ENLRO5dddtkgrO6///7l0GoWzhW+jb3dxOYRloK3Qrje0uIDu4Qh3Wj+/i0wsxHS+TIjAADyQUhH7zz++OPTQvUDDzxQjmkn5u0upi6kh8KQbu9lr6q697d7v/rVr4qnPe1pg2m+8Y1vlGMAAEAXEdLRS3/2Z382CKxLly4th06u0047bbC+e+65ZzkUAAB0FSEdvXTzzTcPQqtq2J3onOku+nOe85zBup555pnlGAAA0FWEdPSW/5SXP/mTPymHTh7/j7IveMELyqEAAKDLCOnora9+9auD8Kr61Kc+VY6ZHJdccsm0dbzwwgvLMQAAoMsI6ei1D33oQ9NCrD6mcFJ85StfKZ74xCcO1u2II44oxwAAgK4jpKP3Xvva104L6p/73OfKMfn60pe+NO3TXHbZZZfiZz/7WTkWAAB0HSEdvaePOHzJS14yLah/5CMfKcfm5+yzz562Ls94xjOKe+65pxwLAAByQEgHfmPDhg3F3nvvPS3c6h9Lc/o88UcffbRYuHDhtHXYdttti7vuuqtsAQAAckFIB0o///nPpz7lxYdc1eLFizt9J/r73/9+8f73v39Gv/fdd9/ioYceKlsBAICcENKBwMc//vEZgVelO+v6jPGHH364bDl3fvSjH029d/7QQw+t7Ks+dhEAAOSLkA5UWLt2beVddSt9OdD8+fOLJUuWTH1CzCmnnDKrddJJJxXHHnts8brXvW7qs86r+qQ68MADiy9/+cvlWgAAgFwR0oEG+hjDww8/vDIQd6kWLFhQXHvttWWvAQBA7gjpQAt6e8lZZ51VvP71ry+22mqryqCcsp70pCdNvf3m05/+dLF+/fqylwAAYFIQ0oEI69atK66//vrinHPOKT7xiU9UvkVlnPWxj32sOOOMM4qrr76aj1MEAKAHCOkAAABAxxDSAQAAgI4hpAMAAAAdQ0gHAAAAOoaQDgAAAHQMIR0AAADoGEI6AAAA0DGEdAAAAKBjCOkAAABApxTF/wc8nqaEcPh6EwAAAABJRU5ErkJggg==) ##### 客户端 1. 登录时使用http鉴权获取服务端返回来的token。 2. 跟服务端成功建立WebSocket连接时主动向服务端推送event=auth的消息,并带上token完成鉴权。 #### 心跳检测与断线重连 ##### 服务端 1. 服务启动后就是用setInterval每1s遍历所有连接中的客户端。 2. 标记所有客户端的isAlive为false。 3. 推送heartbeat消息到客户端。 4. 当接收到客户端返回来的heartbeat消息,标记isAlive为true。 5. 在下一次setInterval中,遍历客户端的isAlive标记位,如果存在isAlive为false的说明在这1s内存在客户端没有返回heartbeat的情况,视为断线了,主动断开与其的连接。 ##### 客户端 1. 在WebSocket的onError事件回调用,延时1s进行重新连接。 2. 在收到服务端发送过来的heartbeat消息时,使用setTimeout设置一个计时器,在1s+0.5s后主动断开连接;并把上一个setTimeout终止掉,实现如果1.5s内没有收到下一个heartbeat,就视为断线了,进行重连操作。