首页 > 其他分享 >无涯教程-Socket.IO - 聊天示例

无涯教程-Socket.IO - 聊天示例

时间:2024-01-28 11:05:40浏览次数:34  
标签:function http socket 示例 无涯 io var data Socket

现在我们已经很熟悉Socket.IO,让我们编写一个聊天应用程序,可以在不同的聊天室中使用它进行聊天,我们将允许用户选择用户名,并允许他们使用他们聊天。因此,首先,让我们设置HTML文件以请求用户名-

<!DOCTYPE html>
<html>
   <head>
      <title>Hello Learnfk</title>
   </head>
   <script src="https://cdn.jsdelivr.net/npm/socket.io-client@2/dist/socket.io.js"></script>
   
   <script>
      var socket=io();
   </script>
   <body>
      <input type="text" name="name" value="" placeholder="Enter your name!">
      <button type="button" name="button">Let me chat!</button>
   </body>
</html>

现在我们已经设置了HTML以请求用户名,让我们创建服务器以接受来自客户端的连接,我们将允许人们使用 setUsername 事件发送他们选择的用户名。如果存在用户,我们将通过 userExists 事件进行响应,否则将使用 userSet 事件进行响应。

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res) {
   res.sendfile('index.html');
});

users = [];
io.on('connection', function(socket) {
   console.log('A user connected');
   socket.on('setUsername', function(data) {
      if(users.indexOf(data) > -1) {
         users.push(data);
         socket.emit('userSet', {username: data});
      } else {
         socket.emit('userExists', data + ' username is taken! Try some other username.');
      }
   })
});

http.listen(3000, function() {
   console.log('listening on localhost:3000');
});

当人们单击按钮时,我们需要将用户名发送到服务器。如果用户存在,我们会显示一条错误消息;否则,我们显示一个消息屏幕-

<!DOCTYPE html>
<html>
   <head>
      <title>Hello Learnfk</title>
   </head>
   
   <script src = "/socket.io/socket.io.js"></script>
   <script>
      var socket = io();
      function setUsername() {
         socket.emit('setUsername', document.getElementById('name').value);
      };
      var user;
      socket.on('userExists', function(data) {
         document.getElementById('error-container').innerHTML = data;
      });
      socket.on('userSet', function(data) {
         user = data.username;
         document.body.innerHTML = '<input type = "text" id = "message">\
         <button type = "button" name = "button" onclick = "sendMessage()">Send</button>\
         <div id = "message-container"></div>';
      });
      function sendMessage() {
         var msg = document.getElementById('message').value;
         if(msg) {
            socket.emit('msg', {message: msg, user: user});
         }
      }
      socket.on('newmsg', function(data) {
         if(user) {
            document.getElementById('message-container').innerHTML += '<div><b>' + 
               data.user + '</b>: ' + data.message + '</div>'
         }
      })
   </script>
   
   <body>
      <div id = "error-container"></div>
      <input id = "name" type = "text" name = "name" value = "" 
         placeholder = "Enter your name!">
      <button type = "button" name = "button" onclick = "setUsername()">
         Let me chat!
      </button>
   </body>
</html>

现在,如果您使用相同的用户名连接两个客户端,它将给您一个错误,如下面的屏幕截图所示-

Chat Name Taken

提供可接受的用户名后,您将进入带消息框和发送消息按钮的屏幕。现在,我们必须处理消息并将其定向到连接的客户端。为此,修改您的app.js文件以包括以下更改-

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res) {
   res.sendfile('index.html');
});

users = [];
io.on('connection', function(socket) {
   console.log('A user connected');
   socket.on('setUsername', function(data) {
      console.log(data);
      
      if(users.indexOf(data) > -1) {
         socket.emit('userExists', data + ' username is taken! Try some other username.');
      } else {
         users.push(data);
         socket.emit('userSet', {username: data});
      }
   });
   
   socket.on('msg', function(data) {
      //Send message to everyone
      io.sockets.emit('newmsg', data);
   })
});

http.listen(3000, function() {
   console.log('listening on localhost:3000');
});

现在,将任意数量的客户端连接到您的服务器,为其提供用户名并开始聊天!在以下示例中,我们已经连接了两个名称分别为Ayush和Harshit的客户端,并从这两个客户端发送了一些消息-

Chat Example

参考链接

https://www.learnfk.com/socket.io/socket.io-chat-application.html

标签:function,http,socket,示例,无涯,io,var,data,Socket
From: https://blog.51cto.com/u_14033984/9451571

相关文章

  • 无涯教程-Swift - 简介
    Swift编程语言,支持多编程范式和编译式,用来撰写基于macOS/OSX、iOS、iPadOS、watchOS和tvOS的软件。苹果公司于2014年在苹果开发者年会(WWDC)发布了Swift编程语言。从设计上苹果公司让Swift与Objective-C共存在苹果公司的操作系统上。2010年7月,苹果开发者工具部门总监克里斯·......
  • 无涯教程-Socket.IO - 命名空间
    Socket.IO允许您"Namespaces命名"Socket,这实际上意味着分配不同的端点。这是一项有用的函数,可通过在通信通道之间引入分隔来最大程度地减少资源(TCP连接)的数量,并同时在您的应用程序内分隔关注点。多个命名空间实际上共享同一WebSockets连接,从而为我们节省了服务器上的Socket端口......
  • 无涯教程-Socket.IO - 广播服务
    Broadcasting意味着向所有连接的客户端发送消息,我们可以将消息发送给所有连接的客户端,我们可以使用io.sockets.emit方法。注意-这将向所有连接的客户端ALL发出事件(该事件可能触发了此事件的Socket)。在此示例中,我们将向所有用户广播已连接客户端的数量。更新app.js文件......
  • 无涯教程-Socket.IO - 应用示例
    创建一个名为app.js的文件,然后输入以下代码来设置快速应用程序-varapp=require('express')();varhttp=require('http').Server(app);app.get('/',function(req,res){res.sendfile('index.html');});http.listen(3000,function(){conso......
  • 无涯教程-Socket.IO - 环境
    要开始使用Socket.IO进行开发,您需要安装Node和npm(节点程序包管理器)。如果您没有这些,请转到节点设置,以在本地系统上安装节点。通过在终端中运行以下命令来确认已安装节点和npm。node--versionnpm--version您应该得到类似于以下内容的输出:v17.3.08.3.0打开终端,并在......
  • 无涯教程-Socket.IO - 简介
    Socket.IO是用于实时Web应用程序的JavaScript库。它支持Web客户端和服务器之间的实时双向通信。它包括两个部分:在浏览器中运行的客户端库和用于node.js的服务器端库,这两个组件具有相同的API。实时应用实时应用程序(RTA)是在用户感知为即时或当前的时段内运行的应用程序。实......
  • 无涯教程-Scala Tuples函数
    Scala元组将固定数量的项目组合在一起,以便它们可以作为整体传递。与数组或列表不同,元组可以容纳不同类型的对象,但它们也是不可变的。以下是一个包​​含整数,字符串和控制台的元组的示例。valt=(1,"hello",Console)以下是语法糖-valt=newTuple3(1,"hello",Console)元......
  • 无涯教程-Scala Maps函数
    ScalaMap是键/值对的集合。可以根据其键检索任何值,键在Map中是唯一的,但值不必是唯一的。默认情况下,Scala使用不可变的Map。如果要使用可变Map,则必须显式导入scala.collection.mutable.Map类。如果您要同时使用可变Map和不可变Map,则可以继续将可变Map称为Map,但可以将可变集......
  • 无涯教程-Scala Sets函数
    ScalaSets是同一类型的不同元素的集合,换句话说,集合是不包含重复元素的集合。默认情况下,Scala使用不可变的Set。如果要使用可变Set,则必须显式导入scala.collection.mutable.Set类,如果要在同一集合中同时使用可变集和不可变集,则可以继续将不可变集称为Set,但可以将可变集称为......
  • 无涯教程-Scala Lists函数
    Scala列表与数组非常相似,这意味着列表的所有元素都具有相同的类型,但是有两个重要的区别,首先,列表是不可变的,这意味着列表的元素无法通过分配进行更改。元素类型为T的列表的类型写为List[T]。//字符串列表valfruit:List[String]=List("apples","oranges","pears")//整......