Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用高速公路解决外部模块中的Socket.io连接

用高速公路解决外部模块中的Socket.io连接
EN

Stack Overflow用户
提问于 2016-03-13 15:02:48
回答 2查看 644关注 0票数 0

我有以下情况:当我试图连接html视图中名为‘signings-Server.js’的模块时,控制台会说: GET ERROR HTTP/1.1 400 Bad Request 1ms,但只有当我添加这些模块时才会发生这种情况。当我尝试在没有他的情况下进行连接时,socket.io连接工作得非常完美。

app.js

代码语言:javascript
运行
AI代码解释
复制
//Modules
var express = require("express"),
http = require("http"),
morgan= require("morgan"),
bodyParser = require('body-parser'),
methodOverride = require('method-override'),
app = express(),
server = http.createServer(app),
io = require("socket.io").listen(server);

app.use(express.static(__dirname + '/public'));
app.use(morgan('dev'));
app.use(bodyParser.urlencoded({ extended:false}));
app.use(bodyParser.json());
app.use(methodOverride());

app.set("views",__dirname + "/views");




//I need to 'onnect with this module
//require('./Signaling-Server.js')(myServerOrPort);
require('./Signaling-Server.js')(server);

//Server is ready
server.listen(3000);

信令-服务器代码在这里( MuazKhan Proyect“RTCMultiConnection”的介绍)

Signaling-Server.js

代码语言:javascript
运行
AI代码解释
复制
// Muaz Khan      - www.MuazKhan.com
// MIT License    - www.WebRTC-Experiment.com/licence
// Documentation  - github.com/muaz-khan/RTCMultiConnection

module.exports = exports = function(app, socketCallback) {
    var io = require('socket.io').listen(app, {
        log: false,
        origins: '*:*'
    });

    io.set('transports', [
        'websocket', // 'disconnect' EVENT will work only with 'websocket'
        'xhr-polling',
        'jsonp-polling'
    ]);

    var listOfUsers = {};
    var shiftedModerationControls = {};
    var ScalableBroadcast;

    io.sockets.on('connection', function(socket) {
        var params = socket.handshake.query;
        var socketMessageEvent = params.msgEvent || 'RTCMultiConnection-Message';

        if (params.enableScalableBroadcast) {
            if (!ScalableBroadcast) {
                ScalableBroadcast = require('./Scalable-Broadcast.js');
            }
            var singleBroadcastAttendees = params.singleBroadcastAttendees;
            ScalableBroadcast(socket, singleBroadcastAttendees);
        }

        socket.userid = params.userid;

        listOfUsers[socket.userid] = {
            socket: socket,
            connectedWith: {},
            isPublic: false, // means: isPublicModerator
            extra: {}
        };

        socket.on('extra-data-updated', function(extra) {
            try {
                if (!listOfUsers[socket.userid]) return;
                listOfUsers[socket.userid].extra = extra;

                for (var user in listOfUsers[socket.userid].connectedWith) {
                    listOfUsers[user].socket.emit('extra-data-updated', socket.userid, extra);
                }
            } catch (e) {}
        });

        socket.on('become-a-public-moderator', function() {
            try {
                if (!listOfUsers[socket.userid]) return;
                listOfUsers[socket.userid].isPublic = true;
            } catch (e) {}
        });

        socket.on('get-public-moderators', function(userIdStartsWith, callback) {
            try {
                userIdStartsWith = userIdStartsWith || '';
                var allPublicModerators = [];
                for (var moderatorId in listOfUsers) {
                    if (listOfUsers[moderatorId].isPublic && moderatorId.indexOf(userIdStartsWith) === 0 && moderatorId !== socket.userid) {
                        var moderator = listOfUsers[moderatorId];
                        allPublicModerators.push({
                            userid: moderatorId,
                            extra: moderator.extra
                        });
                    }
                }

                callback(allPublicModerators);
            } catch (e) {}
        });

        socket.on('changed-uuid', function(newUserId) {
            try {
                if (listOfUsers[socket.userid] && listOfUsers[socket.userid].socket.id == socket.userid) {
                    if (newUserId === socket.userid) return;

                    var oldUserId = socket.userid;
                    listOfUsers[newUserId] = listOfUsers[oldUserId];
                    listOfUsers[newUserId].socket.userid = socket.userid = newUserId;
                    delete listOfUsers[oldUserId];
                    return;
                }

                socket.userid = newUserId;
                listOfUsers[socket.userid] = {
                    socket: socket,
                    connectedWith: {},
                    isPublic: false,
                    extra: {}
                };
            } catch (e) {}
        });

        socket.on('set-password', function(password) {
            try {
                if (listOfUsers[socket.userid]) {
                    listOfUsers[socket.userid].password = password;
                }
            } catch (e) {}
        });

        socket.on('disconnect-with', function(remoteUserId, callback) {
            try {
                if (listOfUsers[socket.userid] && listOfUsers[socket.userid].connectedWith[remoteUserId]) {
                    delete listOfUsers[socket.userid].connectedWith[remoteUserId];
                    socket.emit('user-disconnected', remoteUserId);
                }

                if (!listOfUsers[remoteUserId]) return callback();

                if (listOfUsers[remoteUserId].connectedWith[socket.userid]) {
                    delete listOfUsers[remoteUserId].connectedWith[socket.userid];
                    listOfUsers[remoteUserId].socket.emit('user-disconnected', socket.userid);
                }
                callback();
            } catch (e) {}
        });

        function onMessageCallback(message) {
            try {
                if (!listOfUsers[message.sender]) {
                    socket.emit('user-not-found', message.sender);
                    return;
                }

                if (!listOfUsers[message.sender].connectedWith[message.remoteUserId] && !!listOfUsers[message.remoteUserId]) {
                    listOfUsers[message.sender].connectedWith[message.remoteUserId] = listOfUsers[message.remoteUserId].socket;
                    listOfUsers[message.sender].socket.emit('user-connected', message.remoteUserId);

                    if (!listOfUsers[message.remoteUserId]) {
                        listOfUsers[message.remoteUserId] = {
                            socket: null,
                            connectedWith: {},
                            isPublic: false,
                            extra: {}
                        };
                    }

                    listOfUsers[message.remoteUserId].connectedWith[message.sender] = socket;

                    if (listOfUsers[message.remoteUserId].socket) {
                        listOfUsers[message.remoteUserId].socket.emit('user-connected', message.sender);
                    }
                }

                if (listOfUsers[message.sender].connectedWith[message.remoteUserId] && listOfUsers[socket.userid]) {
                    message.extra = listOfUsers[socket.userid].extra;
                    listOfUsers[message.sender].connectedWith[message.remoteUserId].emit(socketMessageEvent, message);
                }
            } catch (e) {}
        }

        var numberOfPasswordTries = 0;
        socket.on(socketMessageEvent, function(message, callback) {
            if (message.remoteUserId && message.remoteUserId === socket.userid) {
                // remoteUserId MUST be unique
                return;
            }

            try {
                if (message.remoteUserId && message.remoteUserId != 'system' && message.message.newParticipationRequest) {
                    if (listOfUsers[message.remoteUserId] && listOfUsers[message.remoteUserId].password) {
                        if (numberOfPasswordTries > 3) {
                            socket.emit('password-max-tries-over', message.remoteUserId);
                            return;
                        }

                        if (!message.password) {
                            numberOfPasswordTries++;
                            socket.emit('join-with-password', message.remoteUserId);
                            return;
                        }

                        if (message.password != listOfUsers[message.remoteUserId].password) {
                            numberOfPasswordTries++;
                            socket.emit('invalid-password', message.remoteUserId, message.password);
                            return;
                        }
                    }
                }

                if (message.message.shiftedModerationControl) {
                    if (!message.message.firedOnLeave) {
                        onMessageCallback(message);
                        return;
                    }
                    shiftedModerationControls[message.sender] = message;
                    return;
                }

                if (message.remoteUserId == 'system') {
                    if (message.message.detectPresence) {
                        if (message.message.userid === socket.userid) {
                            callback(false, socket.userid);
                            return;
                        }

                        callback(!!listOfUsers[message.message.userid], message.message.userid);
                        return;
                    }
                }

                if (!listOfUsers[message.sender]) {
                    listOfUsers[message.sender] = {
                        socket: socket,
                        connectedWith: {},
                        isPublic: false,
                        extra: {}
                    };
                }

                // if someone tries to join a person who is absent
                if (message.message.newParticipationRequest) {
                    var waitFor = 120; // 2 minutes
                    var invokedTimes = 0;
                    (function repeater() {
                        invokedTimes++;
                        if (invokedTimes > waitFor) {
                            socket.emit('user-not-found', message.remoteUserId);
                            return;
                        }

                        if (listOfUsers[message.remoteUserId] && listOfUsers[message.remoteUserId].socket) {
                            onMessageCallback(message);
                            return;
                        }

                        setTimeout(repeater, 1000);
                    })();

                    return;
                }

                onMessageCallback(message);
            } catch (e) {}
        });

        socket.on('disconnect', function() {
            try {
                var message = shiftedModerationControls[socket.userid];

                if (message) {
                    delete shiftedModerationControls[message.userid];
                    onMessageCallback(message);
                }
            } catch (e) {}

            try {
                // inform all connected users
                if (listOfUsers[socket.userid]) {
                    for (var s in listOfUsers[socket.userid].connectedWith) {
                        listOfUsers[socket.userid].connectedWith[s].emit('user-disconnected', socket.userid);

                        if (listOfUsers[s] && listOfUsers[s].connectedWith[socket.userid]) {
                            delete listOfUsers[s].connectedWith[socket.userid];
                            listOfUsers[s].socket.emit('user-disconnected', socket.userid);
                        }
                    }
                }
            } catch (e) {}

            delete listOfUsers[socket.userid];
        });

        if (socketCallback) {
            socketCallback(socket);
        }
    });
};

有人知道解决办法是什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-14 02:31:50

您可以尝试使用Ahmed的解决方案,即在这里传递server对象:

代码语言:javascript
运行
AI代码解释
复制
require('./Signaling-Server.js') (server);

在您的代码中,server对象使用http

我建议试一试:

代码语言:javascript
运行
AI代码解释
复制
var fs = require('fs');

var options = {
    key: fs.readFileSync('fake-keys/privatekey.pem'),
    cert: fs.readFileSync('fake-keys/certificate.pem')
};

var express = require("express"),
    http = require("https"), // Use HTTPs here -------------
    app = express(),
    server = http.createServer(options, app);

require('./Signaling-Server.js')(server);

您可以尝试有效的SSL证书密钥或假钥匙

以下是如何使用有效证书:

代码语言:javascript
运行
AI代码解释
复制
var options = {
    key: fs.readFileSync('../ssl/private/domain.com.key'),
    cert: fs.readFileSync('../ssl/certs/domain.com.crt'),
    ca: fs.readFileSync('../ssl/certs/domain.com.cabundle')
};
票数 1
EN

Stack Overflow用户

发布于 2016-03-13 19:49:29

在Express 3中,您应该将应用程序对象传递给socket.io,而不是像Express 2中那样的服务器。假设您使用的是Express 3而不是2。

试着替换这个

代码语言:javascript
运行
AI代码解释
复制
require('./Signaling-Server.js')(server);

有了这个

代码语言:javascript
运行
AI代码解释
复制
require('./Signaling-Server.js')(app);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35977003

复制
相关文章
OpenCV实现仿射变换
这样我们就获得了变换后的图像! 我们将会把它显示出来. 在此之前, 我们还想要旋转它...
流川疯
2022/12/02
7460
OpenCV实现仿射变换
仿射变换与透视变换
仿射变换保证物体形状的“平直性”和“平行性”。透视变换不能保证物体形状的“平行性”。仿射变换是透视变换的特殊形式。 将透视变换写成3*3矩阵形式,即为M; 以下面这张图为例,实现仿射变换,包括旋转,平
一棹烟波
2018/01/12
1.3K0
仿射变换与透视变换
已知仿射变换的系数,求仿射变换的反向系数
已知(ax,bx,cx),(ay,by,cy)为其仿射变换系数,则(X,Y)到(xx,yy)必然也存在仿射变换关系:
charlee44
2022/05/05
2650
OpenCV与仿射变换
拉伸、收缩、扭曲、旋转是图像的几何变换,在三维视觉技术中大量应用到这些变换,又分为仿射变换和透视变换。
种花家的奋斗兔
2020/11/12
1.1K0
仿射变换及其应用
单词 affine,读音:[ə'faɪn]。来自于英语affinity。英语词根fin来自于拉丁语finis,表示“边界,末端”,例如finish、final等单词。词头ad表示“去,往”,拼出名词affinity,本意为“接壤,结合”,用来指“姻亲,由于婚姻而产生的亲戚关系”,引申为“亲密关系,相似性”等 。
老齐
2021/12/15
2K0
仿射变换及其应用
仿射变换(affine transformation)
在 线性变换 中其实也提到了仿射变换,当时就定性了平面上二维仿射变换不是线性变换,因为原点会移动。
为为为什么
2023/03/19
1.3K0
仿射变换(affine transformation)
番外篇: 仿射变换与透视变换
常见的2D图像变换从原理上讲主要包括基于2×3矩阵的仿射变换和基于3×3矩阵透视变换。
CodecWang
2021/12/07
2.2K0
番外篇: 仿射变换与透视变换
【opencv实践】仿射变换和透视变换
上面这副图就是我们今天要处理的了,我们想把它从拍照视角变成鸟瞰图,这是机器人导航中的常用手段,以便在该平面上进行规划和导航。
周旋
2020/06/04
5.7K1
仿射变换及其变换矩阵的理解
这篇文章不包含透视变换(projective/perspective transformation),而将重点放在仿射变换(affine transformation),将介绍仿射变换所包含的各种变换,以及变换矩阵该如何理解记忆。
李拜六不开鑫
2019/05/31
3.8K0
数据增强之仿射变换
一般情况下,不同的图像任务和模型有不同的数据增强方法。然而比较通用的有图像的仿射变换,颜色抖动,水平/垂直翻转, 随机crop。
用户4363240
2019/11/26
1.8K0
数据增强之仿射变换
opencv仿射变换之获取变换矩阵
.getAffineTransform(src[],dst[])通过三点可以确定变换后的位置,相当于解方程,3个点对应三个方程,能解出偏移的参数和旋转的角度。
淼学派对
2023/10/14
4040
opencv仿射变换之获取变换矩阵
几种图像变换 刚体变换 仿射变换 投影变换
转自:https://www.cnblogs.com/bnuvincent/p/6691189.html
bye
2020/10/30
3.1K0
几种图像变换 刚体变换  仿射变换 投影变换
坐标系统仿射变换函数使用总结
Mac的AppKit坐标系统是已左下角为坐标原点,向右为X轴正向,向上为Y轴正向。
SheltonWan
2019/06/11
1.4K0
坐标系统仿射变换函数使用总结
图像处理的仿射变换与透视变换
  这一周主要在研究图像的放射变换与透视变换,目前出现的主要问题是需要正确识别如下图中的编码标志点圆心。 1.当倾斜角较小时:
3D视觉工坊
2020/12/11
1.4K0
图像处理的仿射变换与透视变换
仿射变换实现组合操作 抠图+缩放+旋转
前言          之前在工作中需要用仿射变换的方式来实现,用给定的bounding box(标注框)从一张图片 中扣出特定的区域,然后做旋转和缩放等特定操作。然后在网上搜索了一下与仿射变换相关的资料, 看了仿射变换的思想和一些例子,然后结合手头上的代码,做了一些实验,最后终于搞懂了如何实现。 实验代码(提供C++、Scala和Python三种语言的实现): 码云地址 Github地址 正文          根据给定的标注框从原图中裁剪出物体并且对裁剪出的图片做各种随机旋转和缩放变换, 如果这几个步骤
Ldpe2G
2018/07/09
1.8K0
opencv仿射变换之图像平移
仿射变换是图像旋转,缩放,平移的总称。具体的做法是通过一个矩阵和原图坐标进行计算,得到新的坐标,完成变换。所以关键就是这个矩阵。
淼学派对
2023/10/14
2210
opencv仿射变换之图像平移
仿射变换实现组合操作 抠图+缩放+旋转
之前在工作中需要用仿射变换的方式来实现,用给定的bounding box(标注框)从一张
Ldpe2G
2018/06/22
8690
iOS开发之仿射变换示例总结
本篇博客比较简单,但还是比较实用的。其中的示例依然使用Swift3.0来实现,该博客算是下篇博客的一个引子,因为我们下篇博客要介绍使用Swift开发iOS应用中常用的一些Extension。而在这些Extension中的Image Extension中会用到仿射变换的东西来对图片进行处理。所以本篇博客就先将fang放射变换(CGAffineTransform)的东西拎出来单独的过一下,这样在下篇博客中就可以减少对仿射变换的介绍了。 在之前的博客中,我们聊过仿射变换的东西,不过是使用的放射变换来实现的动画,关
lizelu
2018/01/11
1.3K0
iOS开发之仿射变换示例总结
【走进OpenCV】重映射与仿射变换
其中的 f 就是映射方式,也就说,像素点在另一个图像中的位置是由 f 来计算的。
小白学视觉
2019/10/24
1.2K0
仿射函数_仿射空间
今天看书用到仿射函数,不明白,上网查资料,貌似网上这方面资料也不是很多,有的也是讨论性质,不太准确。找到一些英文资料,现总结如下:
全栈程序员站长
2022/09/20
8590

相似问题

另一个变量中的Javascript变量

115

在另一个变量中使用的Javascript函数变量

31

使用变量命名另一个变量javascript

323

Javascript使用变量调用另一个变量

20

在javascript中设置另一个javascript的变量

26
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档