素材牛VIP会员
express4 + socket.io 如何在connection的回调外边使用socket.emit方法
 陈***丶  分类:Node.js  人气:1061  回帖:5  发布于6年前 收藏

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)垃圾回帖将一律封号处理……

Lv6 码匠
邹***b CEO 6年前#1

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

Lv6 码匠
迁***3 Web前端工程师 6年前#2

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写业务逻辑

Lv5 码农
mo***99 产品经理 6年前#3
<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>
Lv7 码师
vv***cv Linux系统工程师 6年前#4

同求解,怎么把那个socket对象暴露出去????

Lv4 码徒
蹲***圈 JS工程师 6年前#5

我也遇到这个问题,求解

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取