当前位置: 首页 > 知识库问答 >
问题:

Appcelerator连接到nodejs服务器

酆俊远
2023-03-14

我有一个nodejs聊天服务器,它有不同的事件“Connection”,“SendChat”,“Switchroom”...

///////////////////////////////////////////////////////////////
// SERVER SETUP


var express = require('express')
, app = express()
, http = require('http')
, server = http.createServer(app)
, io = require('socket.io').listen(server);

server.listen(1214);



var admin_name = '<font color="red">*Admin*</font>';
var users;
// rooms which are currently available in chat
var rooms = ['public'];

io.sockets.on('connection', function (socket) {

// when the client emits 'adduser', this listens and executes
socket.on('adduser', function(username, password){
    getLogin(username, password, socket)
});

// when the client emits 'sendchat', this listens and executes
socket.on('sendchat', function (data) {
    insertMess(socket.username, data, socket.room);
    var nd = data.split(">");
    if(nd[0] == 'cmd')
    {
        switch(nd[1])
        {
            case 'admin-mess':
                //Return message to user
                socket.emit('updatechat', admin_name, '<font color="red">your message was sent to all rooms.</font><br>'+nd[2]);
                //broadcast message to all rooms
                for(var i=0; i<rooms.length; i++)
                {
                    socket.broadcast.to(rooms[i]).emit('updatechat', '<font color="red">'+admin_name+'</font>', '<font color="red">'+nd[2]+'</font>');
                }   
            break;
            default:
                socket.emit('updatechat', admin_name, 'you try to send a wrong command...');
            break;
        }

        return;
    }

    // we tell the client to execute 'updatechat' with 2 parameters
    io.sockets.in(socket.room).emit('updatechat', socket.username, data);
});

socket.on('switchRoom', function(newroom){
    console.log('--> '+socket.username+" joined the room : "+newroom);
    // leave the current room (stored in session)
    socket.leave(socket.room);

    //get userlist of the room
    users = getRoomUsers(socket.room);
    //update userlist in room
    socket.broadcast.to(socket.room).emit('updateusers', users);

    // join new room, received as function parameter
    socket.join(newroom);
    socket.emit('updatechat', admin_name, 'you are connected to "'+ newroom+'"');
    // sent message to OLD room
    socket.broadcast.to(socket.room).emit('updatechat', admin_name, socket.username+' has left this room');
    // update socket session room title
    socket.room = newroom;
    socket.broadcast.to(newroom).emit('updatechat', admin_name, socket.username+' has joined this room');
    socket.emit('updaterooms', rooms, newroom);
    //socket.broadcast.to(newroom).emit('updateuserlist', socket.clients(newroom));


    users = getRoomUsers(socket.room);
    //update userlist in room
    socket.broadcast.to(socket.room).emit('updateusers', users);
    //update userlist for client
    socket.emit('updateusers', users);


});

// when the user disconnects.. perform this
socket.on('disconnect', function(){
    // echo globally that this client has left
    socket.broadcast.emit('updatechat', admin_name, socket.username + ' has disconnected');
    socket.leave(socket.room);
    console.log('<-- '+socket.username+" has disconnected".info);
    //get userlist of the room
    users = getRoomUsers(rooms[0]);
    //update userlist for client
    socket.broadcast.emit('updateusers', users);
});

});


...
    null

Thx很多!

共有1个答案

薛烨
2023-03-14

您需要客户端库来连接到服务器。您可以在domain.com/socket.io/socket.io.js获取它并将其缓存到本地。从那里您可以访问全局io,然后连接到:

var socket = io.connect();

将库复制到您的应用程序中,并提供每x天/周获取最新版本的后台服务可能会更好。

 类似资料:
  • 问题内容: 在我的 主服务器上 ,我从可通过api访问的外部/单独的 redis服务器中 获取数据 。但是,api是不安全的。而且由于我希望将 Redis服务器 分开,因此该技术不适合我的情况。 在我来说,我想有2台独立的服务器, 一个 和 乙 。 A 应该在不使用api或url调用的情况下从 B 加载数据…而是应使用 port (例如)。这样,服务器 乙 只能从访问的 一个 。 我希望这种方法适

  • 我想连接到树莓Pi节点。我从网络外部设置的js服务器。 我的路由器声称端口是开放的。我尝试在127.0.0.0、0.0.0.0和我的公共IP地址运行服务器。 我曾尝试使用ngrok打开端口8080,服务器在其中托管一个简单的网页,但尝试访问myIP:8080不起作用。 有人能帮我吗?

  • 问题内容: 当我使用节点mysql时,在12:00到2:00之间出现错误,表明服务器已关闭TCP连接。这是完整的消息: 有解决办法。但是,以这种方式尝试后,问题也会出现。现在我不知道该怎么办。有人遇到这个问题吗? 这是我按照解决方案编写的方式: 问题答案: 尝试使用以下代码来处理服务器断开连接: 在您的代码中,我错过了之后的部分

  • 但是添加应该在GKE集群中为服务提供一个sidecar,并允许它连接到SQL?

  • 所有运行在localhost上,node到web页面的端口为8001,node.js到可执行文件的端口为8002。请原谅代码,因为我已经试着让这个工作了几天,现在有点难看。 要执行的cmd可执行文件及其参数来自工作的网页。我可以启动EXE。EXE希望每个发送的消息都有一个ACK,这就是为什么您会看到代码将其发回。 我在网页上设置和更新元素时有一个间隔。我还有一个设置消息(msg)的元素。

  • 我正在尝试连接两个docker容器,一个是posgresql,另一个是python flask应用程序。两者都链接正确,python应用程序中的所有连接变量都直接取自postgres容器中通过链接公开的连接变量,并且与检查postgresql容器时发现的连接变量相同。当我将psql与连接字符串中的精确参数一起使用时,即: 成功连接到postgres容器中的数据库,因此我知道postgres正在通过