编辑:删除了对C#的引用,因为唯一接受的答案是关于Java.如果有人需要有关C#中websocket服务器实现的信息,请提出一个新问题.
您是否知道用Java创建WebSockets服务器的"生产就绪"框架?我找到了一个库http://nugget.codeplex.com/但我不知道它是如何稳定和快速的.
Pau*_*Wee 47
接受的答案是3年,随着最近发布的JEE7,现在每个实现servert 3.1的Web容器都将通过标准API(javax.websocket)包支持websocket .
以下代码显示了如何使用JEE7实现websocket的示例:
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint(value = "/chat")
public class ChatServer {
private static final Logger LOGGER =
Logger.getLogger(ChatServer.class.getName());
@OnOpen
public void onOpen(Session session) {
LOGGER.log(Level.INFO, "New connection with client: {0}",
session.getId());
}
@OnMessage
public String onMessage(String message, Session session) {
LOGGER.log(Level.INFO, "New message from Client [{0}]: {1}",
new Object[] {session.getId(), message});
return "Server received [" + message + "]";
}
@OnClose
public void onClose(Session session) {
LOGGER.log(Level.INFO, "Close connection for client: {0}",
session.getId());
}
@OnError
public void onError(Throwable exception, Session session) {
LOGGER.log(Level.INFO, "Error for client: {0}", session.getId());
}
}
Run Code Online (Sandbox Code Playgroud)
这里详细说明.
支持Websocket的Web容器:
Nee*_*aks 35
对于Java,请查看这篇内容丰富的帖子.从那里复制粘贴:
在这些选项中,我猜Jetty和Resin是最成熟和最稳定的.但是,总是很好地做自己的测试.
Vert.x 选项也值得考虑。
创建一个 ws 服务器可以很简单
vertx.websocketHandler(new Handler<ServerWebSocket>() {
public void handle(ServerWebSocket ws) {
// A WebSocket has connected!
}
}).listen(8080);
Run Code Online (Sandbox Code Playgroud)
或者
vertx.createHttpServer().websocketHandler(new Handler<ServerWebSocket>() {
@Override
public void handle(final ServerWebSocket ws) {
logger.info("ws connection established with " + ws.remoteAddress());
ws.dataHandler(new Handler<Buffer>() {
@Override
public void handle(Buffer data) {
JsonObject item = new JsonObject(data.toString());
logger.info("data in -> " + item.encodePrettily());
// if you want to write something back in response to the client
//ws.writeTextFrame(...);
}
});
}
}).listen(port, new Handler<AsyncResult<HttpServer>>() {
@Override
public void handle(AsyncResult<HttpServer> event) {
logger.info("ws server is up and listening on port " + port);
}
});
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参见此处http://vertx.io/docs/vertx-core/java/#_websockets
所以可以用 Vert.x 编写自己的 WebSocket 服务器,将其打包为 FatJar,并自行运行。
或者您可以嵌入 Vert.x 环境。在您的应用程序中,并以编程方式部署您的 Verticle(实现 ws 服务器)。
另一种选择是 JBoss 的 Web 服务器 Undertow。这很容易嵌入到应用程序中。
添加这些依赖项:
<dependency>
<groupId>io.undertow</groupId>
<artifactId>undertow-servlet</artifactId>
<version>${version.io.undertow}</version>
</dependency>
<dependency>
<groupId>io.undertow</groupId>
<artifactId>undertow-websockets-jsr</artifactId>
<version>${version.io.undertow}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
这是一个示例 ws 服务器:
Undertow server = Undertow.builder()
.addHttpListener(8080, "localhost")
.setHandler(path()
.addPrefixPath("/myapp", websocket(new WebSocketConnectionCallback() {
@Override
public void onConnect(WebSocketHttpExchange exchange, WebSocketChannel channel) {
channel.getReceiveSetter().set(new AbstractReceiveListener() {
@Override
protected void onFullTextMessage(WebSocketChannel channel, BufferedTextMessage message) {
final String messageData = message.getData();
for (WebSocketChannel session : channel.getPeerConnections()) {
WebSockets.sendText(messageData, session, null);
}
}
});
channel.resumeReceives();
}
}))
.build();
server.start();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37489 次 |
| 最近记录: |