Home Web Front-end JS Tutorial nodejs+websocket completes a chat system function

nodejs+websocket completes a chat system function

May 20, 2017 pm 01:22 PM
nodejs websocket chat system

This article mainly introduces the improved version of nodejs+websocket real-time chat system, which has certain reference value. Interested friends can refer to it

This article belongs to the improvement of nodejs+websocket real-time chat system Version, the specific content is as follows

I am also really good at it. I have been working on a simple websocket chat system for so many days.

It seems that I still have to write more code in the future.

client.html:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

<!DOCTYPE html>

<html lang="en">

 

<head>

 <meta charset="UTF-8">

 <meta name="viewport" content="width=device-width, initial-scale=1.0">

 <meta http-equiv="X-UA-Compatible" content="ie=edge">

 <title>Document</title>

 <style>

 .kuang {

  width: 600px;

  min-height: 50px;

  max-height: 296px;

  border: 1px solid;

  float: left;

  display: block;

  position: relative;

  overflow-y: scroll;

 }

 

 .value {

  width: 200px;

 }

 

 .input {

  display: block;

  position: absolute;

  left: 0;

  margin-top: 300px;

 }

 </style>

</head>

 

<body>

 <label>连接用户:</label>

 <input type="text" id="name" />

 <button id="conn">连接</button>

 <button id="close">断开</button><br/><br/>

 <p class="kuang" id="mess"></p>

 <p class="input">

 <input type="text" class="value" id="value1" />

 <button id="send">发送</button>

 </p>

 <script>

 var input = document.getElementById("name");

 var conn = document.getElementById("conn");

 var close = document.getElementById("close");

 var mess = document.getElementById("mess");

 var value1 = document.getElementById("value1");

 var pattern = /^[\u4e00-\u9fa5]{2,10}$/;

 

 close.disabled = true;

 if (window.WebSocket) {

  conn.onclick = function () {

  if (!pattern.test(input.value)) {

   alert("名称不能为空且必须为中文");

   return;

  }

  var ws = new WebSocket(&#39;ws://127.0.0.1:8082&#39;);

  conn.disabled = true;

  close.disabled = false;

  ws.onopen = function (e) {

   console.log("连接服务器成功");

   ws.send(input.value);

   input.setAttribute("readOnly", &#39;true&#39;);

   value1.setAttribute("readOnly", &#39;true&#39;);

  }

  ws.onmessage = function (e) {

   value1.removeAttribute("readOnly");

   var time = new Date();

   mess.innerHTML += time.toUTCString() + ":" + e.data + "<br>";

   document.getElementById("send").onclick = function (e) {

   ws.send(input.value + "说:" + value1.value);

   value1.value = " ";

   }

   document.onkeydown = function (e) {

   e = e || window.event;

   if (e.keyCode == 13) {

    document.getElementById("send").onclick();

    return false;

   }

   }

  }

  ws.onclose = function (e) {

   console.log("服务器关闭");

  }

  ws.onerror = function () {

   console.log("连接出错");

  }

  /**

   * 客户端主动断开连接

   *

   * **/

  close.onclick = function () {

   ws.onclose();

   ws.send(input.value + &#39;close&#39; + "了连接");

   input.removeAttribute("readOnly");

   conn.disabled = false;

   close.disabled = true;

  }

 

  }

 

 }

 </script>

</body>

 

</html>

Copy after login

I can only say that the interface is ugly and ignore it.
server.js:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

var ws = require("nodejs-websocket");

console.log("开始建立连接...");

var str1 = null, str2 = null, clientReady = false, serverReady = false;

var a = [];

var server = ws.createServer(function (conn) {

 conn.on(&#39;text&#39;, function (str) {

 a.push(str);

 if (!clientReady) {

  if (a[0] === str) {

  str1 = conn;

  clientReady = true;

  str1.sendText("欢迎你" + str);

 

  }

 } else if (!serverReady) {

  if (str.indexOf(&#39;close&#39;) >= 0) {

  a.splice(2, 1);

  clientReady = false;

  str1 = null;

  return;

  }

  if (a[1] === str) {

  str2 = conn;

  serverReady = true;

  str2.sendText("欢迎你" + str);

  str1.sendText(str + "在线啦,你们可以聊天啦");

  return;

  }

 } else if (clientReady && serverReady) {

  str2.sendText(str);

  str1.sendText(str);

  if (str.indexOf(&#39;close&#39;) >= 0) {

  a.splice(2, a.length);

  var len = a.length;

  for (var i = 0; i < len; i++) {

   // 定位该元素位置

   if (str.indexOf(a[i]) >= 0) {

   a.splice(i, 1);

   if (i == 0) {

    str1 = str2;

   }

   serverReady = false;

   str2 = null;

   return;

   }

 

  }

  }

 }

 })

 

 conn.on("close", function (code, reason) {

 console.log("关闭连接");

 clientReady = false;

 serverReady = false;

 })

 conn.on("error", function (code, reason) {

 console.log("异常关闭");

 });

}).listen(8082);

console.log("websocket连接完毕")

Copy after login

A simple screenshot to explain:

##Start the service, Execute the same page twice and you can chat. Anyway, that's the process. There is just another big problem. For example, I am disconnected from A, and only B is connected to the giant. B can still send messages. If I can send messages, it is considered okay. Actually b receives his own information. Then I can't bear it.

That's it. The logic is all messed up. It's a brain-consuming thing to sort out the logic. Are there any classmates who know? How to deal with it

[Related recommendations]


1.

Javascript free video tutorial

2.

Js complete countdown jet lag effect

3.

Detailed explanation of the method of recursively deleting elements in an array in JS

4.

Detailed explanation of an example of JS completing the star rating function

5.

Js complete countdown time difference effect

The above is the detailed content of nodejs+websocket completes a chat system function. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

The difference between nodejs and vuejs The difference between nodejs and vuejs Apr 21, 2024 am 04:17 AM

Node.js is a server-side JavaScript runtime, while Vue.js is a client-side JavaScript framework for creating interactive user interfaces. Node.js is used for server-side development, such as back-end service API development and data processing, while Vue.js is used for client-side development, such as single-page applications and responsive user interfaces.

Is nodejs a backend framework? Is nodejs a backend framework? Apr 21, 2024 am 05:09 AM

Node.js can be used as a backend framework as it offers features such as high performance, scalability, cross-platform support, rich ecosystem, and ease of development.

How to connect nodejs to mysql database How to connect nodejs to mysql database Apr 21, 2024 am 06:13 AM

To connect to a MySQL database, you need to follow these steps: Install the mysql2 driver. Use mysql2.createConnection() to create a connection object that contains the host address, port, username, password, and database name. Use connection.query() to perform queries. Finally use connection.end() to end the connection.

What are the global variables in nodejs What are the global variables in nodejs Apr 21, 2024 am 04:54 AM

The following global variables exist in Node.js: Global object: global Core module: process, console, require Runtime environment variables: __dirname, __filename, __line, __column Constants: undefined, null, NaN, Infinity, -Infinity

Is there a big difference between nodejs and java? Is there a big difference between nodejs and java? Apr 21, 2024 am 06:12 AM

The main differences between Node.js and Java are design and features: Event-driven vs. thread-driven: Node.js is event-driven and Java is thread-driven. Single-threaded vs. multi-threaded: Node.js uses a single-threaded event loop, and Java uses a multi-threaded architecture. Runtime environment: Node.js runs on the V8 JavaScript engine, while Java runs on the JVM. Syntax: Node.js uses JavaScript syntax, while Java uses Java syntax. Purpose: Node.js is suitable for I/O-intensive tasks, while Java is suitable for large enterprise applications.

What is the difference between npm and npm.cmd files in the nodejs installation directory? What is the difference between npm and npm.cmd files in the nodejs installation directory? Apr 21, 2024 am 05:18 AM

There are two npm-related files in the Node.js installation directory: npm and npm.cmd. The differences are as follows: different extensions: npm is an executable file, and npm.cmd is a command window shortcut. Windows users: npm.cmd can be used from the command prompt, npm can only be run from the command line. Compatibility: npm.cmd is specific to Windows systems, npm is available cross-platform. Usage recommendations: Windows users use npm.cmd, other operating systems use npm.

Is nodejs a back-end development language? Is nodejs a back-end development language? Apr 21, 2024 am 05:09 AM

Yes, Node.js is a backend development language. It is used for back-end development, including handling server-side business logic, managing database connections, and providing APIs.

How to deploy nodejs project to server How to deploy nodejs project to server Apr 21, 2024 am 04:40 AM

Server deployment steps for a Node.js project: Prepare the deployment environment: obtain server access, install Node.js, set up a Git repository. Build the application: Use npm run build to generate deployable code and dependencies. Upload code to the server: via Git or File Transfer Protocol. Install dependencies: SSH into the server and use npm install to install application dependencies. Start the application: Use a command such as node index.js to start the application, or use a process manager such as pm2. Configure a reverse proxy (optional): Use a reverse proxy such as Nginx or Apache to route traffic to your application

See all articles