server-socket.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. //用户信息
  2. let guest_info = function () {
  3. this.connect = null;
  4. this.name = '';
  5. }
  6. //所有用户,必须用全局global安装,这样保证每一个线程都能访问到相同的全局数组
  7. global.guest_arr = [];
  8. var ws = require("nodejs-websocket");
  9. // 创建服务器
  10. var server = ws.createServer(function (connect)
  11. {
  12. // 监听客户端回调信息
  13. connect.on("text", function (data) {
  14. let data_json = JSON.parse(data);
  15. //用户登录
  16. if (data_json.type === 'login') {
  17. let bUserExist = false;
  18. for (let i = 0; i < global.guest_arr.length; i++) {
  19. let guest = global.guest_arr[i];
  20. if (guest.name === data_json.name) {
  21. bUserExist = true;
  22. global.guest_arr[i].connect = connect;
  23. }
  24. }
  25. //如果新用户就注册
  26. if (!bUserExist) {
  27. let guest = new guest_info();
  28. guest.connect = connect;
  29. guest.name = data_json.name;
  30. global.guest_arr.push(guest);
  31. }
  32. console.log(data_json.name+'进入聊天室')
  33. }
  34. //只需要服务器接收消息不需要发送给其他用户
  35. else if (data_json.type === 'server') {
  36. }
  37. //发送消息给指定名字的用户
  38. else if (data_json.type === 'user') {
  39. console.log('收到'+data_json.name+'的消息')
  40. let guest = null;
  41. // 判断用户是否存在
  42. for (let i = 0; i < global.guest_arr.length; i++) {
  43. let name = global.guest_arr[i].name;
  44. if (name === data_json.user_name) {
  45. guest = global.guest_arr[i];
  46. console.log('存在用户')
  47. }
  48. }
  49. // 用户存在发送消息
  50. if (guest) {
  51. guest.connect.sendText('{"name":"'+ data_json.name +'","message":"'+data_json.message+'"}');
  52. console.log(data_json.name+'发送信息给'+guest.name)
  53. console.log(data_json.message)
  54. }
  55. }
  56. //发送消息给所有用户
  57. else if (data_json.type === 'all') {
  58. for (let i = 0; i < global.guest_arr.length; i++) {
  59. let guest = global.guest_arr[i];
  60. guest.connect.sendText('{"name":"'+ data_json.name +'","message":"'+data_json.message+'"}');
  61. }
  62. }
  63. })
  64. connect.on("close", function (code, reason) {
  65. // console.log(code.name+'退出聊天室')
  66. console.log("关闭连接")
  67. });
  68. connect.on("error", function (code, reason) {
  69. // console.log(code.name+'异常退出聊天室')
  70. console.log("异常关闭")
  71. });
  72. }).listen(3000)
  73. console.log("WebSocket建立完毕")