用node.js和socket.io做了一个即时聊天功能,怎么部署到线上??

聊天的功能是根据网上的例子做的,由于没有做过,所以单独建立文件夹做的功能,现在做好了,怎么把这个文件夹放到项目中去。

clipboard.png

clipboard.png

这个是聊天的目录结构,

下面这个是用TP框架做的项目。想把上面的文件夹放到Home模块里,在前台显示聊天页面。但是访问不了页面啊
clipboard.png

单独测试聊天页面

clipboard.png

【Apache监听的是80,node.js是监听8080,把聊天文件放入到项目中,访问该页面怎么访问】

阅读 4.1k
5 个回答

在需要的php的view层html页面的script标签让它去连接node就行,贴一段我之前的实现:

...省略...
<script src="//cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>
<script src="http://localhost:3000/socket.io/socket.io.js"></script>
<script type="text/javascript">
    $(function () {

        var socket = io.connect('http://localhost:3000');

        // info
        var uid = '<?php echo $uid;?>';
        var username = '<?php echo $username;?>';
        var roomId = '<?php echo $roomId;?>';

        var info = {"uid": uid, "username": username, "roomId": roomId};
        // 用户加载此页面后,将用户信息传给node服务器
        socket.emit('on_load', info);
        // node发送欢迎给所有客户端,有新的用户加入
        socket.on('welcome', function (msg) {
            $('.room-message').append('<p style="color: #ff0000;">系统消息 ' + getNowFormatDate() + ': <br>' + msg.username + ' 加入房间</p>');
        });
        ...省略...
    });
</script>

不知道你是否能明白这个逻辑,总是php依旧和正常一样处理逻辑,只是用view层通过javascript代码段连接socketio或者说就是node服务器,完成实时功能。

Apache干嘛的?

node.js相当一个apache,每个项目用一个端口号来区分,而apache用文件夹来区分。
服务器安装node.js之后,用命令

  1. npm install
  2. npm run dev

如楼上仁兄所说,你可以直接把socket.io的客户端加载再你的view层

然后再通过请求后端node服务的socket建立长连接

后端服务的话可以直接通过域名+端口的形式(xx.com:8080)来做socket请求路径

当然,有一定的弊端,就是你如果没有做长连接请求验证以及开启node集群的话...万一那天某个人无聊,给你的socket发起个20W个长连接...估计服务器有点吃不消

推荐问题
宣传栏