繁体   English   中英

在 sockets.io 中发送/接收数据

[英]send/receive data in sockets.io

我正在学习节点和套接字并遇到了绊脚石。 我的服务器运行正常,它连接和断开用户并将他们的名字添加到套接字。 我有它,以便当用户发送消息时,其他任何登录的人都会收到它并显示在弹出式警报中。 我需要发送的不仅仅是用户名之类的消息,还可能发送更多数据。 我知道使用 json 是可能的,但是如何将它包含在发送和接收的数据中? 我已经包含了下面的代码。 所以我想在发送和接收时添加带有数据的用户名并将其显示在弹出框中,例如“用户名发送了此消息......”它适用于console.log

服务器.js

var http = require('http');
var Static = require('node-static');
var app = http.createServer(handler);
var io = require('socket.io').listen(app);
var port = 8080;

var files = new Static.Server('./public');

function handler (request, response) {
    request.on('end', function() {
        files.serve(request, response);
    }).resume();
}


var numUsers = 0;

io.on('connection', (socket) => {
  var addedUser = false;

  socket.on('add user', (username) => {
    if (addedUser) return;

    // we store the username in the socket session for this client
    socket.username = username;
    //addedUser = true;
    ++numUsers;
    // echo globally (all clients) that a person has connected
    //socket.broadcast.emit('user joined', {
    //  username: socket.username,
     // numUsers: numUsers
     console.log(username+' has logged on, now there are '+numUsers+' online');
  });

  //when receive new coors
  socket.on('new_message', function (data) {
    socket.broadcast.emit('new_message', data);
    console.log(socket.username+' just sent '+data);
    });


// when the user disconnects.. perform this
socket.on('disconnect', () => {
       --numUsers;
       console.log(socket.username+' has left, now there are '+numUsers+' online');
});


});

索引.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Example of Getting Current Position</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script> var username = prompt('What\'s your username?'); </script>
<script type="text/javascript">
socket = io.connect('/');
socket.emit('add user', username);

function sendmessage() {
    var new_message = document.getElementById("new_message").value;
    //alert (new_message);
    socket.emit('new_message', new_message);

}

socket.on('new_message', function (data) {
    //socket.broadcast.emit('new_message', data);
    //console.log(data);
    alert(data);
    });

</script>
</head>
<body>
    <button type="button" onclick="sendmessage()">Send message</button><BR><BR>
    <input name="new_message" type="text" id="new_message" value=""><BR>


</body>
</html>  

经过大量阅读后,我已经这样做了,并进行了以下更改:

index.html

function sendmessage() {
    var new_message = document.getElementById("new_message").value;
    var Details3 = {  
        username: username,  
        message: new_message  
    }; 

socket.emit('new_message', Details3);

server.js

socket.on('new_message', (data) => {
    var New_Details = {  
        username: data.username,  
        message: data.message  
    }; 

    socket.broadcast.emit('update_message', New_Details);
    console.log(data.username + ' just wrote ' + data.message);
});

来不及回答,但你可以在没有 json 的情况下做到

index.html

function sendmessage() {
    socket.emit('new_message', username , new_message);
    }

server.js

socket.on('new_message', (username , message) => {
    socket.broadcast.emit('update_message', username , message);
    console.log(username + ' just wrote ' + message);
});

我希望它有帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM