java关闭websocket,Java WebSockets:关闭websocket连接时不调用OnClose方法

Here is my WebSocket endpoint

import javax.websocket.CloseReason;

import javax.websocket.OnClose;

import javax.websocket.OnMessage;

import javax.websocket.Session;

import javax.websocket.server.ServerEndpoint;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import com.twitter.hbc.core.Client;

@ServerEndpoint("/tweets")

public class TweetStreamServer {

private static final Logger LOGGER = LoggerFactory.getLogger(TweetStreamServer.class);

@OnMessage

public void tweets(final String message, final Session client) throws IOException, InterruptedException {

LOGGER.debug("registering search term {}", message);

final TwitterHoseBird twitterHoseBird = new TwitterHoseBird();

final Client twitterClient = twitterHoseBird.getInstance(message);

while(!twitterClient.isDone()) {

client.getAsyncRemote().sendText(twitterHoseBird.getMsgQueue().take());

}

}

@OnClose

public void onClose(CloseReason reason) {

System.out.println("Closing connection");

LOGGER.warn("closing connection {}", reason);

}

}

When I deploy this, I try to hit the endpoint via JavaScript code as

var connection = new WebSocket('ws://127.0.0.1:8080/tweetstream-1.0-SNAPSHOT/tweets');

connection.onmessage = function (e) {

console.log('Server: ' + e.data);

};

connection.send('fifa');

This starts to send tweets from the server. Now when I close the connection from client, I do

connection.close();

Problem?

I want to close connection to twitter once websocket client connection closes. I expect the following code to execute

@OnClose

public void onClose(CloseReason reason) {

System.out.println("Closing connection");

LOGGER.warn("closing connection {}", reason);

}

But on server log, I do not see any such statement

/Users/harith/code/installers/wildfly-8.1.0.Final/bin/standalone.sh

=========================================================================

/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/bin/java -classpath "/Applications/IntelliJ IDEA 13.app/lib/idea_rt.jar:/Applications/IntelliJ IDEA 13.app/lib/util.jar" -Dfile.encoding=UTF-8 com.intellij.rt.execution.CommandLineWrapper /private/var/folders/qs/y62p93xs0bdb9ptk6l2r8vw0002kvk/T/classpath571663656928489966.tmp com.intellij.javaee.oss.process.JavaeeProcess 53801 com.intellij.javaee.oss.jboss.agent.JBoss71Agent

Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0

JBoss Bootstrap Environment

[2014-07-12 02:16:06,305] Artifact tweetstream:war: Server is not connected. Deploy is not available.

JBOSS_HOME: /Users/harith/code/installers/wildfly-8.1.0.Final

Detected server admin port: 9990

Detected server http port: 8080

JAVA: /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/bin/java

JAVA_OPTS: -server -Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true

=========================================================================

[0m14:16:06,048 INFO [org.jboss.modules] (main) JBoss Modules version 1.3.3.Final

[0m[0m14:16:06,289 INFO [org.jboss.msc] (main) JBoss MSC version 1.2.2.Final

[0m[0m14:16:06,349 INFO [org.jboss.as] (MSC service thread 1-6) JBAS015899: WildFly 8.1.0.Final "Kenny" starting

[0m[0m14:16:07,165 INFO [org.jboss.as.server] (Controller Boot Thread) JBAS015888: Creating http management service using socket-binding (management-http)

[0m[0m14:16:07,180 INFO [org.xnio] (MSC service thread 1-8) XNIO version 3.2.2.Final

[0m[0m14:16:07,186 INFO [org.xnio.nio] (MSC service thread 1-8) XNIO NIO Implementation Version 3.2.2.Final

[0m[0m14:16:07,207 INFO [org.jboss.as.security] (ServerService Thread Pool -- 45) JBAS013171: Activating Security Subsystem

[0m[33m14:16:07,208 WARN [org.jboss.as.txn] (ServerService Thread Pool -- 46) JBAS010153: Node identifier property is set to the default value. Please make sure it is unique.

[0m[0m14:16:07,211 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool -- 32) JBAS010280: Activating Infinispan subsystem.

[0m[0m14:16:07,213 INFO [org.wildfly.extension.io] (ServerService Thread Pool -- 31) WFLYIO001: Worker 'default' has auto-configured to 16 core threads with 128 task threads based on your 8 available processors

[0m[0m14:16:07,219 INFO [org.jboss.as.naming] (ServerService Thread Pool -- 40) JBAS011800: Activating Naming Subsystem

[0m[0m14:16:07,221 INFO [org.jboss.as.webservices] (ServerService Thread Pool -- 48) JBAS015537: Activating WebServices Extension

[0m[0m14:16:07,222 INFO [org.jboss.as.security] (MSC service thread 1-13) JBAS013170: Current PicketBox version=4.0.21.Beta1

[0m[0m14:16:07,222 INFO [org.jboss.as.jsf] (ServerService Thread Pool -- 38) JBAS012615: Activated the following JSF Implementations: [main]

[0m[0m14:16:07,251 INFO [org.wildfly.extension.undertow] (ServerService Thread Pool -- 47) JBAS017502: Undertow 1.0.15.Final starting

[0m[0m14:16:07,252 INFO [org.wildfly.extension.undertow] (MSC service thread 1-3) JBAS017502: Undertow 1.0.15.Final starting

[0m[0m14:16:07,266 INFO [org.jboss.as.connector.logging] (MSC service thread 1-11) JBAS010408: Starting JCA Subsystem (IronJacamar 1.1.5.Final)

[0m[0m14:16:07,291 INFO [org.jboss.remoting] (MSC service thread 1-8) JBoss Remoting version 4.0.3.Final

[0m[0m14:16:07,291 INFO [org.jboss.as.connector.subsystems.datasources] (ServerService Thread Pool -- 27) JBAS010403: Deploying JDBC-compliant driver class org.h2.Driver (version 1.3)

[0m[0m14:16:07,299 INFO [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-5) JBAS010417: Started Driver service with driver-name = h2

[0m[0m14:16:07,346 INFO [org.jboss.as.naming] (MSC service thread 1-15) JBAS011802: Starting Naming Service

[0m[0m14:16:07,346 INFO [org.jboss.as.mail.extension] (MSC service thread 1-13) JBAS015400: Bound mail session [java:jboss/mail/Default]

[0m[0m14:16:07,390 INFO [org.wildfly.extension.undertow] (ServerService Thread Pool -- 47) JBAS017527: Creating file handler for path /Users/harith/code/installers/wildfly-8.1.0.Final/welcome-content

[0m[0m14:16:07,425 INFO [org.wildfly.extension.undertow] (MSC service thread 1-1) JBAS017525: Started server default-server.

[0m[0m14:16:07,498 INFO [org.wildfly.extension.undertow] (MSC service thread 1-13) JBAS017531: Host default-host starting

[0m[0m14:16:07,561 INFO [org.wildfly.extension.undertow] (MSC service thread 1-2) JBAS017519: Undertow HTTP listener default listening on /127.0.0.1:8080

[0m[0m14:16:07,724 INFO [org.jboss.as.server.deployment.scanner] (MSC service thread 1-13) JBAS015012: Started FileSystemDeploymentService for directory /Users/harith/code/installers/wildfly-8.1.0.Final/standalone/deployments

[0m[0m14:16:07,728 INFO [org.jboss.as.server.deployment] (MSC service thread 1-3) JBAS015876: Starting deployment of "4f0c2559-5f61-4cf1-b441-c6288b419b80.war" (runtime-name: "4f0c2559-5f61-4cf1-b441-c6288b419b80.war")

[0m[0m14:16:07,736 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-6) JBAS010400: Bound data source [java:jboss/datasources/ExampleDS]

[0m[0m14:16:07,918 INFO [org.jboss.ws.common.management] (MSC service thread 1-8) JBWS022052: Starting JBoss Web Services - Stack CXF Server 4.2.4.Final

[0m[0m14:16:08,062 INFO [io.undertow.websockets.jsr] (MSC service thread 1-11) UT026003: Adding annotated server endpoint class com.self.tweetstream.TweetStreamServer for path /tweets

[0m[0m14:16:08,075 INFO [io.undertow.websockets.jsr] (MSC service thread 1-11) UT026004: Adding annotated client endpoint class com.self.tweetstream.TweetStreamClient

[0m[0m14:16:08,167 INFO [org.wildfly.extension.undertow] (MSC service thread 1-11) JBAS017534: Registered web context: /4f0c2559-5f61-4cf1-b441-c6288b419b80

[0m[0m14:16:08,203 INFO [org.jboss.as.server] (Controller Boot Thread) JBAS018559: Deployed "4f0c2559-5f61-4cf1-b441-c6288b419b80.war" (runtime-name : "4f0c2559-5f61-4cf1-b441-c6288b419b80.war")

[0m[0m14:16:08,215 INFO [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http://127.0.0.1:9990/management

[0m[0m14:16:08,215 INFO [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://127.0.0.1:9990

[0m[0m14:16:08,216 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: WildFly 8.1.0.Final "Kenny" started in 2554ms - Started 250 of 304 services (91 services are lazy, passive or on-demand)

[0mConnected to server

[2014-07-12 02:16:08,683] Artifact tweetstream:war: Artifact is being deployed, please wait...

[0m14:16:08,794 INFO [org.jboss.as.server.deployment] (MSC service thread 1-4) JBAS015876: Starting deployment of "tweetstream-1.0-SNAPSHOT.war" (runtime-name: "tweetstream-1.0-SNAPSHOT.war")

[0m[0m14:16:09,408 INFO [org.jboss.weld.deployer] (MSC service thread 1-5) JBAS016002: Processing weld deployment tweetstream-1.0-SNAPSHOT.war

[0m[0m14:16:09,450 INFO [org.hibernate.validator.internal.util.Version] (MSC service thread 1-5) HV000001: Hibernate Validator 5.1.0.Final

[0m[0m14:16:09,548 INFO [org.jboss.weld.deployer] (MSC service thread 1-14) JBAS016005: Starting Services for CDI deployment: tweetstream-1.0-SNAPSHOT.war

[0m[0m14:16:09,573 INFO [org.jboss.weld.Version] (MSC service thread 1-14) WELD-000900: 2.1.2 (Final)

[0m[0m14:16:09,580 INFO [org.jboss.weld.deployer] (MSC service thread 1-1) JBAS016008: Starting weld service for deployment tweetstream-1.0-SNAPSHOT.war

[0m[0m14:16:10,361 INFO [io.undertow.websockets.jsr] (MSC service thread 1-8) UT026004: Adding annotated client endpoint class com.self.tweetstream.TweetStreamClient

[0m[0m14:16:10,364 INFO [io.undertow.websockets.jsr] (MSC service thread 1-8) UT026003: Adding annotated server endpoint class com.self.tweetstream.TweetStreamServer for path /tweets

[0m[0m14:16:10,383 INFO [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-8) Initializing Mojarra 2.2.6-jbossorg-4 20140501-1134 for context '/tweetstream-1.0-SNAPSHOT'

[0m[0m14:16:11,293 INFO [org.wildfly.extension.undertow] (MSC service thread 1-8) JBAS017534: Registered web context: /tweetstream-1.0-SNAPSHOT

[0m[0m14:16:11,307 INFO [org.jboss.as.server] (management-handler-thread - 2) JBAS018559: Deployed "tweetstream-1.0-SNAPSHOT.war" (runtime-name : "tweetstream-1.0-SNAPSHOT.war")

[0m[2014-07-12 02:16:11,327] Artifact tweetstream:war: Artifact is deployed successfully

[2014-07-12 02:16:11,327] Artifact tweetstream:war: Deploy took 2,644 milliseconds

[0m14:16:21,124 INFO [com.twitter.hbc.httpclient.BasicClient] (default task-2) New connection executed: tweetStream-client, endpoint: /1.1/statuses/filter.json?delimited=length&stall_warnings=true

[0m[0m14:16:21,207 INFO [com.twitter.hbc.httpclient.ClientBase] (hosebird-client-io-thread-0) tweetStream-client Establishing a connection

[0m[0m14:16:23,789 INFO [com.twitter.hbc.httpclient.ClientBase] (hosebird-client-io-thread-0) tweetStream-client Processing connection data

[0m

What am I missing here?

UPDATE

I have test as following

@Test

public void test() throws URISyntaxException, IOException, DeploymentException, InterruptedException {

System.out.println("URI: " + getEndpointUrl());

TweetStreamClient.latch = new CountDownLatch(1);

Session session = connectToServer(TweetStreamClient.class, "tweets");

assertNotNull(session);

// (todo: harit) assert correct things

// assertTrue(TweetStreamClient.latch.await(10, TimeUnit.SECONDS));

// assertEquals("Hello", TweetStreamClient.response);

}

When I run this test, I see following in logs

8295 [main] INFO io.undertow.websockets.jsr - UT026004: Adding annotated client endpoint class com.self.tweetstream.TweetStreamClient

14:59:26,981 INFO [org.wildfly.extension.undertow] (MSC service thread 1-13) JBAS017535: Unregistered web context: /b5b7b561-8b49-4c69-b55f-7859b86da36d

14:59:26,983 INFO [stdout] (default task-2) session id:AMAjTU1TYTCjXBgLOKnMXS6q, search term: Hello World!

14:59:26,985 INFO [stdout] (default task-2) Closing session: io.undertow.websockets.jsr.UndertowSession@cd7ecfa

14:59:26,986 WARN [com.self.tweetstream.TweetStreamServer] (default task-2) closing session: AMAjTU1TYTCjXBgLOKnMXS6q, reason: CloseReason[1001]

But when I call connection.close() from JavaScript, I do not see such thing

解决方案

I was experiencing the same problem and initially thought it was a Wildfly issue, but then noticed that Firefox was triggering @OnClose. When I added an @OnError, Chromium was triggering that.

I found an another StackOverflow question referring to the same behavior.

It also appears that Chromium may have just fixed this issue as of a month ago.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值