这是我在index.html(客户端)中的代码.我想知道为什么这个数字没有增加.我希望每次套接字连接时都给它一个唯一的名字.
var number = 0;
socket.on("connect",function(){
number = number+1;
socket.emit("add user","user"+ number )
})
Run Code Online (Sandbox Code Playgroud)
但是,当我有这台服务器
io.on("connection", function(socket){
console.log("io.onconnection")
socket.on("add user", function(data){
console.log(data)
})
});
Run Code Online (Sandbox Code Playgroud)
在我记录的每个连接上user1,为什么不是第二个连接user2?谢谢
我想知道为什么websocket协议没有使用(比如设计师没有选择)相同的http响应代码(如200,404或403)等来传达响应?相反,有101意味着建立了通信.
我在这个问题上花了几个星期,但似乎找不到解决方法。这是用例。我正在开发chrome扩展程序,此扩展程序的主要目的之一是检测WebSocket何时打开或关闭。我看过WebSockets的HTML5规范,它们公开了以下相关方法/事件:
WebSocket.prototype.readyState = 0;
WebSocket.prototype.onopen = 0;
WebSocket.prototype.onerror = 0;
WebSocket.prototype.onclose = 0;
function WebSocket(url,protocols) {}
WebSocket.prototype.close = function(code,reason) {};
Run Code Online (Sandbox Code Playgroud)
由于我无法从扩展中访问单个实例,因此我不得不依靠包装这些原型来确定何时调用它们。例如:
WebSocket.prototype.close = function (close) {
console.log("Closing socket....");
return function (code, reason) {
return close.apply(this, arguments);
};
}(WebSocket.prototype.close);
Run Code Online (Sandbox Code Playgroud)
但是,我真正想做的是以某种方式为onopen,onerror或onclose包装或注册侦听器。不幸的是我不知道该怎么做。我尝试了一堆不同的方法。上面的方法适用于“关闭”,但它们不提供我依赖的“打开”。最有前途的想法没有用,它是:
WebSocket.prototype.constructor = function (constructor) {
debugger;
console.log("Register all my events here!");
constructor.apply(this, arguments);
}(WebSocket.prototype.constructor);
Run Code Online (Sandbox Code Playgroud)
不幸的是,我从不能够达到断点或查看控制台日志,这使我相信自己做错了什么。
作为最后的选择,我尝试使用Object.Observe(),但无法观察原型:
Object.observe(WebSocket.prototype.readyState, function (changes) {
console.log("Ready state");
});
Object.observe(WebSocket.prototype.onopen, function (changes) {
console.log("On open");
});
Run Code Online (Sandbox Code Playgroud)
因此,总而言之,我尝试了几种不同的方法,但最终我碰壁了。最后,我的目标是通过侦听任何公开的方法或事件来检测WebSocket何时打开或关闭。任何帮助将不胜感激。
更新: 这是一个小提琴,包括以下建议:
http://jsfiddle.net/s35zpfq9/1/
谢谢!
javascript html5 websocket google-chrome-extension google-chrome-devtools
我是Java的新手,但我必须用它来做一个与WebSocket相关的小项目.
所以,我在我的CentOS 7上在VirtualBox中安装了JDK 1.8.0和NetBeans 8.1.
我加入了泰鲁斯-独立客户端- JDK 1.12插件在pom.xml中做出独立的WebSocket客户端,并建立了良好的.但是,我遇到了以下错误:
[root@cet7 ~]# java -jar "/root/NetBeansProjects/Switchclient/target/Switchclient-1.0-SNAPSHOT.jar"
Exception in thread "main" java.lang.NoClassDefFoundError: javax/websocket/ContainerProvider
at org.sample.switchclient.Switchclient.main(Switchclient.java:21)
Caused by: java.lang.ClassNotFoundException: javax.websocket.ContainerProvider
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
[root@cet7 ~]# java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)
Run Code Online (Sandbox Code Playgroud)
我没有更多的搜索和发现的"容器实现的完全限定类名ContainerProvider必须在上市META-INF /服务/ javax.websocket.ContainerProvider为在执行JAR文件的文件" ServiceLoader,根据Oracle文档API.所以,我将serviceloader-maven-plugin添加到pom.xml中.结果是它确实生成了META-INF/services/javax.websocket.ContainerProvider文件,但没有任何内容,并且运行时错误继续存在.我尝试手动修改内容并将其重新打包到JAR中,但它没有奏效:
我已经附加了Java文件和pom.xml.我已经工作了几个小时,并且不知道问题是什么,因此对此线程的任何回复都将不胜感激. …
Socket.io可以在台式机chrome,chrome和firefox上完美运行,但在chrome(标准版和dev(51)安卓版)上均不能正常运行。
这是我的代码:
index.html:
<script src="/socket.io/socket.io.js"></script>
<script type="text/babel" src="scripts/messenger.js"></script>
Run Code Online (Sandbox Code Playgroud)
messenger.js
var socket = io.connect('localhost:3000');
socket.on('chat message incoming', (msg) =>
this.incomingMessageHandler(JSON.parse(msg))
)
socket.emit('chat message outgoing', JSON.stringify(message));
Run Code Online (Sandbox Code Playgroud)
我已经完全按照官方的socket.io教程进行了所有操作。有什么想法吗?
干杯,Wojtek
我在服务器上运行一个API,该API处理用户连接和消息传递系统。
除此之外,我还在同一台服务器上启动了一个websocket,等待连接和其他东西。
假设我们可以通过Android应用访问此功能。
我很难弄清楚现在应该做什么,这是我的想法:
1-当用户连接到应用程序时,API将连接到websocket。我们仅允许Android应用在此套接字上侦听以获取新消息。当用户想要回答时,Android应用会将消息发送到API。API将接收到的消息本身写入套接字,该消息将由另一个用户使用的Android应用读取。这样,API可以在将消息写入套接字之前将消息存储在数据库中。
2- API不会以任何方式连接到websocket。Android应用程序会在需要时侦听并写入Websocket,并且在写入Websocket时也应向API发送请求,以便可以将消息存储在DB中。
可能以上都不正确,请让我知道
编辑
我已经理解了为什么我应该使用websocket,这似乎是拥有这种“实时”系统的最佳方法(例如,在收到新消息时),而不是强制客户端每隔x秒发出一次HTTP请求以检查是否存在是新邮件。
我仍然不了解的是,如何与我的数据库进行通信。抱歉,如果我的示例不清楚,但我将尝试继续进行下去:
我的消息传递系统需要将所有消息存储在我的API数据库中,以具有某种对话的历史记录。
但是似乎websocket必须与API分开运行,我的意思是这是另一个程序,对吗?因为它不是针对HTTP请求的
那么,API是否也应该侦听此网络套接字以捕获新消息并存储它们?
我正在尝试使用来自本机的socket.io客户端.我在堆栈溢出中找到了几个答案,包括这一个:是否可以将React Native与socket.io结合使用 ,建议使用socket-io客户端并将navigator.userAgent设置为react-native.我尝试了它,它在我的机器人上不起作用,我也在youtube上发现了一个关于这个的视频,但是这个人让它在模拟器上工作,对我来说,一旦我使用远程调试它也能正常工作,因为它在浏览器上我猜.
我在https://www.npmjs.com/package/react-native-socketio上找到了一个项目,但它仍在进行中.那些不得不处理这个问题并设法找到解决方案的人可以给出一些指示吗?最后,我使用了客户端的react本地websockets和服务器端的npm ws库,它运行得很好,但我没有任何后备.
我想为我的网站(社交网络)创建一个实时通知系统我正在使用laravel 5.2,我正在使用socket.io和redis,我创建了notifevent并成功播放了它,但不知道该怎么做,任何人都可以帮助我或指导我.
我最近一直在玩Node.js和Websockets.我正在那里,但是有一个关于JSON.stringify(客户端)的奇怪问题.
我喜欢使用JSON.stringify来确定服务器返回的对象属性.
例如,我有以下代码片段:
ws.onmessage = function(param1) {
alert(JSON.stringify(param1));
}
Run Code Online (Sandbox Code Playgroud)
这会显示一个警告框 {"isTrusted" : true}
由于这个输出,我以为我的服务器没有将消息发送回客户端.出于好奇,我决定只修改警报功能
alert(param1.data);
预期的消息就在那里!所以我的问题是为什么data当JSON.stringify 显然没有包含一个对象时呢?
当我收到套接字事件时,我只是想更新我的视图.我在组件中的代码如下所示:
constructor(private _zone: NgZone){
this.socket = io.connect('http://localhost:3000');
this.socket.on('someEvent', function(data) {
this._zone.run(() => {
this.dataItem = data.item;
console.log(this.dataItem);
});
});
}
Run Code Online (Sandbox Code Playgroud)
当我运行此浏览器控制台时显示一些错误:
EXCEPTION: TypeError: Cannot read property 'run' of undefined
Run Code Online (Sandbox Code Playgroud)
顺便说一下,我的socket事件在index.html中正常工作
任何形式的帮助表示赞赏.
websocket ×10
javascript ×5
socket.io ×5
android ×1
angular ×1
angularjs ×1
api-design ×1
client ×1
html5 ×1
java ×1
json ×1
laravel ×1
maven ×1
php ×1
react-native ×1
redis ×1
typescript ×1
tyrus ×1