html5 - express4 + socket.io 如何在connection的回调外边使用socket.emit方法

 撒大时代撒的照写真 发布于 2022-11-02 00:37

app.js

    var sockect = require('./socket/server')
    var users = require('../router/users')
    
    app.use('/users', users); //路由
    
    var server = app.listen(9000, function () {
        console.log('server start');
    });
    
    sockect(server); //启动socket

server.js

'use strict';

module.exports = function(server) {
    var io = require('socket.io').listen(server);
    io.sockets.on('connection', function (socket) {
        //如何将这里的socket暴露给其他地方的js方法里使用socket.emit ?
    });
    return io;

};

上面是我目前的结构,希望在users里面的逻辑里触发emit方法,google了很多,也没有找到有什么办法可以将参数socket传递出去,不然的话所有逻辑只要涉及到socket.emit的都要写在connection的回调里..

5 个回答
  • <table width="160" border="0" align="center" cellpadding="0" cellspacing="0">
    <tr>
       <td width="165" height="32"><img src="images/tell_top.gif" width="165" height="32" border="0"></td>
         </tr>
         <tr>
          <td height="52" background="images/tell_center.gif">
           <?php
              include_once("function.php");
              $news="明日编程词典上市了!";
              $i=1;
              do{
              ?>
           <table with="148" height="25" border="0" align="center" cellpadding="0" cellspacing="0">
             <tr>
              <td width="17" height="20"><img src="images/mark_0.gif" width="0" height="10"></td>
              <td width="333">
              <?php
               echo chinesesubstr($news, 0, 18);
               if(strlen($nes)>18){
                   echo "...";
               }
              ?> 
              </td>
             </tr>
            <tr>
              <td height="5"></td>
              <td height="5" background="images/back_point_write.gif"></td>
            </tr>
          </table>
            <?php
            $i++;
            }while($i<=5);
            ?>
            </td>
         </tr>
         <tr>
          <td width="165" height="12"><img src="images/tell_bottom.gif" width="165" height="12"></td>
         </tr>
         </table>
    2022-11-03 12:05 回答
  • 同求解,怎么把那个socket对象暴露出去????

    2022-11-03 12:09 回答
  • 我也觉得外部调用socket没什么意义。。
    而且expresssocket两者走的协议都不一样,
    你可以把user的身份信息保存在 局部变量socket的作用域内
    通过标识信息来执行相应用户的操作

    2022-11-03 12:12 回答
  • 我也遇到这个问题,求解

    2022-11-03 12:17 回答
  • server.js文件中:

    var users = require('../router/users')
    module.exports = function(server) {
        var io = require('socket.io').listen(server);
        io.sockets.on('connection', function (socket) {
            //如何将这里的socket暴露给其他地方的js方法里使用socket.emit ?
            users.doSomething(socket);
        });
        return io;
    
    };
    

    然后在users.js写业务逻辑

    2022-11-03 12:23 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有