- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Netty 实现 websockets。我尝试了 DiscardServer 示例,如果我只是使用 Telnet 运行它,它就可以正常工作
Telnet localhost 8090.
因此,无论我在终端窗口中输入什么消息,它都会返回给我。但现在我想在浏览器中实现相同的功能,就像如果我在文本区域中放置一些文本消息,那么它应该在浏览器上显示该文本消息。
我可以使用以下代码启动 websocket 服务器
ChannelFactory factory = new NioServerSocketChannelFactory(
Executors.newCachedThreadPool(),
Executors.newCachedThreadPool());
ServerBootstrap bootstrap = new ServerBootstrap(factory);
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
public ChannelPipeline getPipeline() {
return Channels.pipeline(new DiscardServerHandler());
}
});
bootstrap.setOption("child.tcpNoDelay", true);
bootstrap.setOption("child.keepAlive", true);
bootstrap.bind(new InetSocketAddress(8090));
但是如何将我的文本区域中的短信与 websocket 服务器绑定(bind)
----已更新----
我已经创建了 MyServerHandler 类
public class MyServerHandler extends SimpleChannelUpstreamHandler {
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
Object msg = e.getMessage();
//msg.getClass();
if (msg instanceof HttpRequest) {
//handleHttpRequest(ctx, (HttpRequest) msg);
ctx.getChannel().write(msg);
} else if (msg instanceof WebSocketFrame) {
//handleWebSocketFrame(ctx, (WebSocketFrame) msg);
}
}
}
它调用messageReceived方法,但不执行任何if条件。
我还写了WebSocketServerPipelineFactory类
public class WebSocketServerPipelineFactory implements ChannelPipelineFactory {
@Override
public ChannelPipeline getPipeline() throws Exception {
// Create a default pipeline implementation.
ChannelPipeline pipeline = pipeline();
pipeline.addLast("decoder", new HttpRequestDecoder());
pipeline.addLast("aggregator", new HttpChunkAggregator(65536));
pipeline.addLast("encoder", new HttpResponseEncoder());
pipeline.addLast("handler", new MyServerHandler());
return pipeline;
}
}
我认为它也没有调用此类的方法。
在我写的jsp文件中
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js" type="text/javascript"></script>
<script>
var MESSAGE_HANDSHAKE = "handshake";
var MESSAGE_OPPONENT_UPDATE = "response";
var MESSAGE_TURN_INDICATOR = "turn";
var MESSAGE_GAME_OVER = "game_over";
var WEBSOCKET_URL = "ws://localhost:8090";
$(document).ready(function() {
ws = new WebSocket(WEBSOCKET_URL);
ws.onopen = function(event) {
alert("test");
$('#status').text("Waiting....");
};
ws.onmessage = function(event) {
var message = jQuery.parseJSON(event.data);
alert(message.type);
}
});
<body>
<p id="status"> </p>
</body>
它不会使用任何 jquery 方法。我还缺少什么吗?
另外,如果我写
ws.send("Test Message");
它抛出以下java脚本错误
Uncaught Error: INVALID_STATE_ERR: DOM Exception 11 login.htm:33
(anonymous function) login.htm:33
f.extend._Deferred.e.resolveWith jquery.min.js:2
e.extend.ready jquery.min.js:2
c.addEventListener.C
如果我使用
var WEBSOCKET_URL = "wss://echo.websocket.org/";
然后它就可以工作了,所以这是我无法连接到我的服务器吗?
我正在使用 eclipse 来运行此代码。我正在使用 Apache Tomcat 运行 jsp 代码,并通过将 WebsocketServer.class 作为 java 应用程序运行来运行 websocket 服务器。这有什么区别吗?
---已更新---
我在 MyServerHandler 类中编写了以下方法,并在浏览器中收到错误
Error during WebSocket handshake: 'Sec-WebSocket-Accept' header is missing
MySeverHandler.java
private void handleHttpRequest(ChannelHandlerContext ctx, HttpRequest req)
throws Exception {
// Allow only GET methods.
if (req.getMethod() != HttpMethod.GET) {
// sendHttpResponse(ctx, req, new DefaultHttpResponse(
// HttpVersion.HTTP_1_1, HttpResponseStatus.FORBIDDEN));
return;
}
// Serve the WebSocket handshake request.
if (req.getUri().equals(WEBSOCKET_PATH)
&& Values.UPGRADE.equalsIgnoreCase(req.getHeader(CONNECTION))
&& WEBSOCKET.equalsIgnoreCase(req.getHeader(Names.UPGRADE))) {
// Create the WebSocket handshake response.
HttpResponse res = new DefaultHttpResponse(
HTTP_1_1,
new HttpResponseStatus(101, "Web Socket Protocol Handshake"));
res.addHeader(Names.UPGRADE, WEBSOCKET);
res.addHeader(CONNECTION, Values.UPGRADE);
// Upgrade the connection and send the handshake response.
ChannelPipeline p = ctx.getChannel().getPipeline();
p.remove("aggregator");
p.replace("decoder", "wsdecoder", new WebSocketFrameDecoder());
// Write handshake response to the channel
ctx.getChannel().write(res);
// Upgrade encoder to WebSocketFrameEncoder
p.replace("encoder", "wsencoder", new WebSocketFrameEncoder());
// Initialize the game. Assign players to a game and assign them a letter (X or O)
///initGame(ctx);
return;
}
// Send an error page otherwise.
sendHttpResponse(ctx, req, new DefaultHttpResponse(
HttpVersion.HTTP_1_1, HttpResponseStatus.FORBIDDEN));
}
最佳答案
Netty 使用责任链设计模式,因此每当您需要使用协议(protocol)时,您都需要在管道中创建适当的解码器/编码器。对于 websocket,这里是一个示例管道。
public class WebSocketServerPipelineFactory implements ChannelPipelineFactory {
public ChannelPipeline getPipeline() throws Exception {
// Create a default pipeline implementation.
ChannelPipeline pipeline = pipeline();
pipeline.addLast("decoder", new HttpRequestDecoder());
pipeline.addLast("aggregator", new HttpChunkAggregator(65536));
pipeline.addLast("encoder", new HttpResponseEncoder());
pipeline.addLast("handler", new YourBusinessHandler());
return pipeline;
}
}
您可以在业务处理程序中编写任何业务逻辑。在这种情况下,您只需回显收到的内容,因此在此处理程序中它将类似于 channel.write(incomingMessage);
。
看看这个 tic-tac-toe game了解更多信息。 github 上还有很多关于如何执行此操作的链接信息。
关于java - 在浏览器中使用Netty将短信与websocket绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11971694/
由于某种原因,当 php mail() 发送到文本号码(通过电子邮件)时,即 123456789@vtext.com;发件人显示为 centos apache 服务器输出电子邮件 (apache@ho
我正在编写一个需要用户输入手机号码的新网站,我面临的问题是我需要确保用户实际上是(或在这种情况下,有权访问)的所有者手机号码。 我想出的解决方案是,在提交号码时,我向他们发送带有 token 的短信,
我目前正在尝试编写一个应用程序来拦截文本消息并根据该消息的内容使用react。我试图挂接到 CKSMSService 类中的 _receivedMessage:(struct __CKSMSRecor
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
Android/iPhone/Windows mobile/Symbian 是否有任何一种标准/广泛使用的 SMS 格式可以发送/接收 GPS 坐标(“地理标记 SMS”)? 例如Garmin 具有对
当用户的桌面应用程序上发生警报时,我想向用户的智能手机发送电子邮件或短信。 如何在不提供应用程序内登录凭据的情况下发送电子邮件? 使用 smtp,我需要提供我的凭据,但由于这是针对已发布的应用程序,这
有多久,没有发过短信了? 1、背景简介 在常规的分布式架构下,「消息中心」的服务里通常会集成「短信」的渠道,作为信息触达的重要手段,其他常用的手段还包括:「某微」、「某钉」、
我基本上是在尝试允许用户使用短信发布到他们的博客。我为每个用户存储了一个电话号码,并且由于 twilio 在他们提交给我的页面的发布请求中发送该信息,我可以进行反向查找以查看将其发布到哪个博客。现在出
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我想从 jSMPP 接收 Unicode 短信。 如果数据编码是8,我想将其转换为Unicode符号。 为此,我使用 HexUtil.convertBytesToHexString 函数。 但它没有正
我正在尝试使用 USB 调制解调器发送短信(我有一个 D-Link USB 调制解调器)。我刚找到 SmsLib,但我不知道如何使用 USB 调制解调器。我找到的例子是串行调制解调器,我没有找到任何
我想为网站管理员做一个简单的通知/新闻系统。 将这些消息(最多 250 个字符)存储在数据库中的最佳解决方案是什么? VARCHAR(255) 还是 TEXT? 谢谢 最佳答案 如果它们要短,定义一个
传入的 Type-0 SMS(请注意:“Type-0”是 ment,而不是“Class-0”)如何被 BroadcastReceiver 捕获? 背景:出于配置目的,发送 Type-0 SMS(带有
我在我的 android 应用程序中尝试了这段代码来获取 SMS 消息,但它不起作用,该应用程序没有出现在消息列表中。我应该添加一些东西来让它工作吗?
我在这里的两篇文章中找到了这段代码: String url = "content://sms/"; Uri uri = Uri.parse(url); getContentResolver().reg
有几个示例说明如何在具有高优先级的广播接收器中读取 SMS,然后调用 abortBroadcast() 以阻止 Intent 到达其他应用程序的广播接收器。但是,它们似乎都没有考虑到 Intent 数
我的 sendSms 函数有 try 和 catch block 。 Try block 是默认设备短信应用程序。 catch block 是设置为当前短信应用程序的其他短信应用程序,例如谷歌短信应用
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 7年前关闭。 Improve this qu
客户询问我们是否可以向订阅者发送免费短信。他们想知道是否有办法不向收件人收取入站短信费用? 我们与几个短信服务合作,我不认为这是一个选项。我的假设是您需要与每个运营商合作并从他们的系统发送消息才能完成
我是一名优秀的程序员,十分优秀!