Vert.xを使用して簡単なwebsocketチャットルームを実現
10668 ワード
Vert.xを使用して簡単なwebsocketチャットルームを実現
おかず1枚、会社の業務はnettyベースのwebsocketを使って、どうしてnettyをしないことができて、いっそのこと前にnettyベースのtoolkit、つまりVert.xを知っていました.Vert.xは、イベントと非同期に基づいて、全非同期JavaサーバNettyに依存し、軽量、高性能、多言語開発をサポートするために開発者に人気のあるツールセット(フレームワークではなくツールセット)を拡張しています.Vert.x公式サイトにアクセスするには、をクリックします.現在Vert.xは3.5.0に更新されています.Java、JavaScript、Groovy、Ruby、Ceylon、Kotlin、Scala......今後、より多くの言語サポートが増加する可能性があります.本題に戻ると、この小物コードは多くなく、個人学習Vert.xとしてのみ使用され、実現目標は以下の通りである.-Mavenを使用してVert.xプログラムフレームワークを構築する-Vert.xのWebSocketを使用して簡単なローカルエリアネットワークチャットルームを実現する(テキストメッセージのみサポート)
Step 1開発環境
Vert.x 3.5.0はlambda式のようなJava 8の特性を多く使用しているため、JDKバージョンがJDK 8+Mavenで私が使用している3.3.3.9 IDEで使用するIntellij IDEA 2017.2であることが要求されている
Step 2プロジェクト構築
新しいMavenプロジェクトを作成し、名前などの任意のpom.xmlファイルにVert.x 3.5.0バージョンの依存を導入します.
vertx-webを導入するとvertx-coreが自動的に導入されるので、coreの依存を手動で追加する必要はありません.
Step 3コード作成 WebSocketVerticle.java を作成
Websocket全体のサーバ側コードはこれだけです.他のフレームワークでwebsocketチャットルームを実現したことがなく、コード量がどうなのか分かりません.しかし、Vert.xの実現方法については、個人的には便利だと思います. Verticle の導入最後のHTMLファイルはresources/htmlの下にws.html
群推薦:Vert.x技術に興味がある場合は、QQ群:515203212を加えることができます.転載は出典を明記してください.http://blog.csdn.net/zhhactj/article/details/78728899
おかず1枚、会社の業務はnettyベースのwebsocketを使って、どうしてnettyをしないことができて、いっそのこと前にnettyベースのtoolkit、つまりVert.xを知っていました.Vert.xは、イベントと非同期に基づいて、全非同期JavaサーバNettyに依存し、軽量、高性能、多言語開発をサポートするために開発者に人気のあるツールセット(フレームワークではなくツールセット)を拡張しています.Vert.x公式サイトにアクセスするには、をクリックします.現在Vert.xは3.5.0に更新されています.Java、JavaScript、Groovy、Ruby、Ceylon、Kotlin、Scala......今後、より多くの言語サポートが増加する可能性があります.本題に戻ると、この小物コードは多くなく、個人学習Vert.xとしてのみ使用され、実現目標は以下の通りである.-Mavenを使用してVert.xプログラムフレームワークを構築する-Vert.xのWebSocketを使用して簡単なローカルエリアネットワークチャットルームを実現する(テキストメッセージのみサポート)
Step 1開発環境
Vert.x 3.5.0はlambda式のようなJava 8の特性を多く使用しているため、JDKバージョンがJDK 8+Mavenで私が使用している3.3.3.9 IDEで使用するIntellij IDEA 2017.2であることが要求されている
Step 2プロジェクト構築
新しいMavenプロジェクトを作成し、名前などの任意のpom.xmlファイルにVert.x 3.5.0バージョンの依存を導入します.
<dependency>
<groupId>io.vertxgroupId>
<artifactId>vertx-webartifactId>
<version>3.5.0version>
dependency>
vertx-webを導入するとvertx-coreが自動的に導入されるので、coreの依存を手動で追加する必要はありません.
Step 3コード作成
import io.vertx.core.AbstractVerticle;
import io.vertx.core.http.HttpServer;
import io.vertx.core.http.ServerWebSocket;
import io.vertx.ext.web.Router;
import java.util.HashMap;
import java.util.Map;
public class WebSocketVerticle extends AbstractVerticle {
//
private Map connectionMap = new HashMap<>(16);
@Override
public void start() throws Exception {
HttpServer server = vertx.createHttpServer();
Router router = Router.router(vertx);
router.route("/").handler(routingContext -> {
routingContext.response().sendFile("html/ws.html");
});
websocketMethod(server);
server.requestHandler(router::accept).listen(8080);
}
public void websocketMethod(HttpServer server) {
server.websocketHandler(webSocket -> {
// ID
String id = webSocket.binaryHandlerID();
// ID map , map
if (!checkID(id)) {
connectionMap.put(id, webSocket);
}
// WebSocket
webSocket.frameHandler(handler -> {
String textData = handler.textData();
String currID = webSocket.binaryHandlerID();
// WebSocket
for (Map.Entry entry : connectionMap.entrySet()) {
if (currID.equals(entry.getKey())) {
continue;
}
/*
, writeBinaryMessage
*/
entry.getValue().writeTextMessage(textData);
}
});
// WebSocket , ID map
webSocket.closeHandler(handler -> connectionMap.remove(id) );
});
}
// ID map
public boolean checkID(String id) {
return connectionMap.containsKey(id);
}
Websocket全体のサーバ側コードはこれだけです.他のフレームワークでwebsocketチャットルームを実現したことがなく、コード量がどうなのか分かりません.しかし、Vert.xの実現方法については、個人的には便利だと思います.
public class Main {
public static void main(String[] args) {
Vertx vertx = Vertx.vertx();
vertx.deployVerticle(WebSocketVerticle.class.getName());
}
}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>WebSocketTesttitle>
<script type="text/javascript" src="http://www.w3school.com.cn/jquery/jquery-1.11.1.min.js">script>
head>
<body>
<script>
var socket;
if(window.WebSocket){
socket = new WebSocket("ws://localhost:8080/");
// websocket
socket.onmessage = function(event){
// , blob , Blob FileReader
var blob = event.data;
var content = $("#content").html();
blob += content;
$("#content").html(blob);
};
// websocket
socket.onopen = function (event) {
console.log("websocket ");
};
// websocket
socket.onclose = function (event) {
console.log("websocket ");
};
}else{
alert(" websocket");
}
function send(message) {
if(!window.WebSocket){
return;
}
if(socket.readyState == WebSocket.OPEN){
socket.send(message);
}else{
alert("websocket , ");
}
}
script>
<form onsubmit="return false;">
<input type="text" name="message">
<input type="button" value=" " onclick="send(this.form.message.value)">
<div id="content">div>
form>
body>
html>
群推薦:Vert.x技術に興味がある場合は、QQ群:515203212を加えることができます.転載は出典を明記してください.http://blog.csdn.net/zhhactj/article/details/78728899