在本文中,我们将带你了解node.jsexpresssocket.io路由器在这篇文章中,我们将为您详细介绍node.jsexpresssocket.io路由器的方方面面,并解答nodejs路由配置常
在本文中,我们将带你了解node.js express socket.io 路由器在这篇文章中,我们将为您详细介绍node.js express socket.io 路由器的方方面面,并解答nodejs路由配置常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的Android Socket.IO 实现无法连接到运行 Socket.IO 的 Express 服务器 - Wireshark 显示 HTTP 400/错误请求?、Apache + Symfony2 + HTTPS + Node.js + Socket.io:socket.emit不会触发、Express 路由器 app.all('*', (req, res, next)) 不会在 ec2 实例上执行 HTTP 请求获取请求超时错误、Express 路由器 GET 端点给出了 Not Found 错误。
本文目录一览:- node.js express socket.io 路由器(nodejs路由配置)
- Android Socket.IO 实现无法连接到运行 Socket.IO 的 Express 服务器 - Wireshark 显示 HTTP 400/错误请求?
- Apache + Symfony2 + HTTPS + Node.js + Socket.io:socket.emit不会触发
- Express 路由器 app.all('*', (req, res, next)) 不会在 ec2 实例上执行 HTTP 请求获取请求超时错误
- Express 路由器 GET 端点给出了 Not Found 错误
node.js express socket.io 路由器(nodejs路由配置)
如何解决node.js express socket.io 路由器
我正在使用带有 socket.io 的 express。我想使用 socket.io 不同的路线。所以它有效。但是有一些问题是连接太多。如果我重新加载网站,我可能会得到重新加载的结果。所以我收到警告(节点:7175)MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。 11 个断开监听器添加到 [Socket]。使用emitter.setMaxListeners()增加limit.and这是代码enter image description here
Android Socket.IO 实现无法连接到运行 Socket.IO 的 Express 服务器 - Wireshark 显示 HTTP 400/错误请求?
如何解决Android Socket.IO 实现无法连接到运行 Socket.IO 的 Express 服务器 - Wireshark 显示 HTTP 400/错误请求?
我正在尝试将使用 Native Socket.IO 的 Android 应用程序连接到 Express 服务器。服务器有一个非常简单的工作(目前)在 4200 上接收传入流量并将其发送回其他客户端,以便他们可以显示它 - 尽管现在我只是在调试服务器和这个 Android 实现,希望有漂亮的文字“客户端已连接”
这是服务器 API
// Socket handling
io.on( ''connection'',(socket) => {
console.log(''Client Connected'');
socket.on(''temperature'',(data) => {
console.log(''Engine Data:'' + data);
// For Now,just spit data back to all other connected clients
socket.broadcast.emit(''temperature'',{num: data});
});
socket.on(''disconnect'',()=> {
console.log(''Client disconnected'');
});
});
目前这适用于发送随机数的基本 Node.JS 客户端,所以我知道服务器可以工作:
<script>
var socket = io(''http://localhost:4200'');
socket.on(''connection'',(socket) => {
console.log(''Connection Success'');
});
let temperature = 0;
//Send stuff every 100ms
setInterval(() => {
let lastTemp = temperature < 90 ? temperature : 0;
temperature = Math.floor(Math.random() * 5) + lastTemp;
socket.emit(''temperature'',temperature);
},50);
</script>
但是我的 Android 应用程序有问题 - 服务器不像浏览器客户端那样记录连接,虽然它没有在连接上抛出异常,但套接字 ID 只是 NULL 并且状态是“不调试时连接”。我一直在关注不同的 tutorials 并尝试发布在 StackOverflow 上的解决方案,所以我目前有一个主要活动,它使用一个查找栏来查找如下所示的虚拟值:
//! SocketIO stuff
import com.github.nkzawa.socketio.client.IO
import com.github.nkzawa.socketio.client.socket
class MainActivity : AppCompatActivity() {
//! Instantiate socket for other functions that will utilize it - this will likely be part of its own class
lateinit var mSocket: Socket
//! Main Activity creation
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(findViewById(R.id.toolbar))
//! SeekBar for setting dummy input by user
val seek: SeekBar = findViewById<SeekBar>(R.id.seekBar)
seek.max = 100
seek.progress = 50
//! CurrentVal is our current dummy sensor value
var currentVal: Int;
//! Connect to web server
try {
//! Configure library options
val options = IO.Options()
options.reconnection = true
options.forceNew = true
//This address is the way you can connect to localhost with AVD(Android Virtual Device)
mSocket = IO.socket("http://10.0.2.2:4200/",options) // emulator loopback address
} catch (e: Exception) {
e.printstacktrace()
Log.d("Failure","Failed to connect to server")
}
Log.d("Connected","socket ID:${mSocket.id()}")
mSocket.connect()
seek.setonSeekBarchangelistener(object : SeekBar.OnSeekBarchangelistener {
...
override fun onStopTrackingTouch(seek: SeekBar) {
//Progress stopped
//get value from seek bar
currentVal = seek.progress
//Send the value via our socket
mSocket.emit("temperature",currentVal)
}
})
}
根据其他 StackOverflow 建议的反馈,我的清单包含以下内容
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
...
android:usesCleartextTraffic="true"
...
但是服务器并没有反映客户端已连接。当我查看 Wireshark 时,我看到确实有一个端口 55735 正在尝试连接到运行在 4200 上的服务器,但是服务器正在响应“400 Bad Request”并且 JSON 字符串值为“不支持的协议版本”>
2899 23.395504 127.0.0.1 127.0.0.1 HTTP/JSON 287 HTTP/1.1 400 Bad Request,JavaScript Object Notation (application/json)
这让我相信我使用的 Socket.IO 库和服务器上的 Socket.IO 存在一些兼容性问题。我正在使用的教程在 Socket.IO 网站上...但也是 2015 年的。我应该遵循不同的方式在 Android 上使用 Socket.IO 吗?
解决方法
我似乎找到了问题所在——Android 的 socket.io 库与 NPM 中最新的 3.1.1 不兼容
这主要是通过观察 Wireshark 中的数据来显示的 - 我在端口之间进行了通信,但是响应 - 主要是响应中的 JSON - 表明协议版本不正确
简而言之,我的 build.gradle 文件中对应用程序的依赖(在 2015 年 Socket.IO 的原始教程中显示)已经过时了
implementation ''com.github.nkzawa:socket.io-client:0.6.0''
//OUT OF DATE
Joyce Hong 的这个实现更接近......
implementation (''io.socket:socket.io-client:1.0.0'') {
exclude group: ''org.json'',module: ''json''
}
//Still nope,but that was a clue
但是,与我在 NPM 中的 3.1.1 Socket.IO 库兼容的实现是
implementation (''io.socket:socket.io-client:2.0.0'') {
exclude group: ''org.json'',module: ''json''
}
//YES
如果其他人遇到此问题,即端口之间存在流量,但都没有注册连接,请检查您的版本
Apache + Symfony2 + HTTPS + Node.js + Socket.io:socket.emit不会触发
我一直在这个问题上花费数小时,但无济于事。
编辑:find解决scheme(请参阅我的答案)
项目背景
我正在Symfony2构build一个项目,这个项目需要一个上传大文件的模块。 我select了Node.js和Socket.IO (我必须从头学习,所以我可能会缺less一些基本的东西)。 我将它们与HTML5 File和FileReader API结合起来,将切片中的文件从客户端发送到服务器。 初步testing表明,这种方法作为一个独立的应用程序运行良好,一切都由Node.js处理和服务,但与Apache和Symfony2集成似乎有问题。
该应用程序有一个不安全和安全的部分。 我的目标是在端口80和443上使用Apache来为Symfony2构build的应用程序提供大量服务,在端口8080上使用带有Socket.io Node.js来上传文件。 连接到套接字的客户端页面将由Apache ,但套接字将通过Node.js运行。 上传模块必须通过HTTPS运行,因为页面驻留在具有经过身份validation的用户的安全环境中。
问题是事件使用socket.emit或socket.send似乎没有工作。 客户端到服务器,或服务器到客户端,它没有任何区别。 没有任何反应 ,也没有错误。
使用Apache POI的sxssfSheet从xlsx读取数据
该网站负载很重+ ROR
JSON对象的最大大小?
PHP如何与Apache接口?
Apache的子域名代理jenkins在tomcat插入额外的目录
代码
显示的代码是我的代码的简化版本,没有混乱和敏感的数据。
服务器
var httpsModule = require('https'),fs = require('fs'),io = require('socket.io'); var httpsOptions = { key: fs.readFileSync('path/to/key'),cert: fs.readFileSync('/path/to/cert'),passphrase: "1234lol" } var httpsServer = httpsModule.createServer(httpsOptions); var ioServer = io.listen(httpsServer); httpsServer.listen(8080); ioServer.sockets.on('connection',function(socket) { // This event gets bound,but never fires socket.on('NewFile',function(data) { // To make sure something is happening console.log(data); // Process the new file... }); // Oddly,this one does fire socket.on('disconnect',function() { console.log("disconnected"); }); });
客户
// This is a Twig template,so I'll give an excerpt {% block javascripts %} {{ parent() }} <script type="text/javascript" src="https://my.server:8080/socket.io/socket.io.js"></script> <script type="text/javascript"> var socket = io.connect("my.server:8080",{ secure: true,port: 8080 }); // Imagine this is the function initiating the file upload // File is an object containing Metadata about the file like,filename,size,etc. function uploadNewFile(file) { socket.emit("NewFile",item); } </script> {% endblock %}
所以问题是…
当然,还有更多的应用程序比这个,但这是我卡住的地方。 页面加载完美没有错误,但排放事件永远不会触发或到达服务器(断开事件除外)。 我已经尝试了客户端和服务器上的消息事件,以检查是否只有自定义事件的问题,但也没有工作。 我猜测什么是阻止客户端 – 服务器通信(这不是防火墙,我已经检查)。
我完全不知所措,请帮忙。
编辑:find解决scheme(请参阅我的答案)
通过一个脚本在apache下所有的path服务
Apache SetEnv预装了REDIRECT_。 是什么赋予了?
Linux未find包含非ASCII字符的文件名的错误
PHP直接打印到打印机(本地/networking)(卡在打印后台处理程序中)
NodeJS应该是独立的(没有Apache Nginx的IE)
经过一番苦心的调试,我发现我的设置有问题。 不妨分享我的发现,虽然他们(我认为)与Node.js,Socket.IO或Apache无关。
正如我所提到的,我的问题已经简化了代码,向您展示我的设置没有混乱。 不过,我通过一个对象来设置客户端,使用属性来配置套接字连接。 像这样:
var MyProject = {}; MyProject.Uploader = { location: 'my.server:8080',socket: io.connect(location,port: 8080,query: "token=blabla" }),// ...lots of extra properties and methods }
问题在于使用location作为属性名称。 这是Javascript中的一个保留字,在这种情况下会造成一些奇怪的行为。 我发现奇怪的是,一个对象的属性名称不能是保留字,所以我决定测试。 我也注意到我正在引用属性不正确,我忘记连接到套接字时使用this.location 。 所以我把它改成了这个,只是作为一个测试。
var MyProject = {}; MyProject.Uploader = { location: 'my.server:8080',socket: io.connect(this.location,// ...lots of extra properties and methods }
但无济于事。 我仍然没有通过套接字获取数据。 所以下一步似乎是合乎逻辑的,这是我受挫的调试风暴。 改变属性名称固定一切!
var MyProject = {}; MyProject.Uploader = { socketLocation: 'my.server:8080',socket: io.connect(this.socketLocation,// ...lots of extra properties and methods }
这种方法完美运行,我得到了大量的调试消息。 成功!! 不管是Javascript中的预期行为,还是重写(或者这里发生的任何事情,“滥用”,现在都觉得是一种更好的方式)对象属性,如果你碰巧使用了保留字,我不知道。 我只知道我从现在开始避开他们!
希望它能帮助那里的任何人!
Express 路由器 app.all('*', (req, res, next)) 不会在 ec2 实例上执行 HTTP 请求获取请求超时错误
如何解决Express 路由器 app.all(''*'', (req, res, next)) 不会在 ec2 实例上执行 HTTP 请求获取请求超时错误?
我正在运行一个 MEAN 堆栈应用程序。它在我的本地主机上运行良好。但是,当 MEAN 堆栈部署在 AWS ubuntu 服务器上时,HTTP 请求不会转发到后端。
app.js 文件如下所示:
var app = express();
app.all(''*'',(req,res,next) => {
if (req.secure) {
return next();
}
else {
res.redirect(307,''https://'' + req.hostname + '':'' + app.get(''secPort'') + req.url);
}
});
在我的本地主机上,每个 HTTP 请求都进入 if(req.secure) 循环,并且在 app.js 中定义的相应路由器被调用。
但是,当我在 EC2 上部署我的 MEAN 堆栈应用程序时,控件根本不会进入 if 条件。
我使用Nginx反向代理转发后端请求如下:
server {
charset utf-8;
listen 80 default_server;
server_name _;
location / {
root /opt/front-end;
try_files $uri /index.html;
}
location /* {
proxy_pass http://localhost:/3000;
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
Express 路由器 GET 端点给出了 Not Found 错误
如何解决Express 路由器 GET 端点给出了 Not Found 错误
这是我的 app.js
app.use(''/v1/abc/'',router);
然后是二级
router.use(''/:primary_id/def'',defServices);
最终服务水平
class defServices {
constructor() {
const router = new express.Router({ mergeParams: true });
router.get(''/'',this.func1);
router.get(''/:pid'',this.func2);
router.put(''/'',this.func3);
return router;
}
async func1(req,res) {
//code goes here
}
}
export default new defServices();
我的要求
GET http://localhost:3000/dev/v1/abc/48/def
我遇到第一个 GET 端点无法到达并获得 404 响应的问题,但第二个 GET 端点和第三个 PUT 端点工作正常。此外,这是在无服务器离线中实现的
今天的关于node.js express socket.io 路由器和nodejs路由配置的分享已经结束,谢谢您的关注,如果想了解更多关于Android Socket.IO 实现无法连接到运行 Socket.IO 的 Express 服务器 - Wireshark 显示 HTTP 400/错误请求?、Apache + Symfony2 + HTTPS + Node.js + Socket.io:socket.emit不会触发、Express 路由器 app.all('*', (req, res, next)) 不会在 ec2 实例上执行 HTTP 请求获取请求超时错误、Express 路由器 GET 端点给出了 Not Found 错误的相关知识,请在本站进行查询。
本文标签: