tomcat 8 + java 7 의 WebSocket 채 팅 데모
5691 단어 websocket
참고:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/chat/ChatAnnotation.java?view=markup
websocket - api 필요
ChatAnnotation.java
package jmind.ws.tomcat.java7;
import java.io.IOException;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.atomic.AtomicInteger;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import jmind.core.util.HTMLUtil;
/**
* tomcat8 & java7
* @author wbxie
* 2013-11-9
*/
@ServerEndpoint(value = "/ws/chat")
public class ChatAnnotation {
private static final String GUEST_PREFIX = "Guest";
private static final AtomicInteger connectionIds = new AtomicInteger(0);
private static final Set<ChatAnnotation> connections = new CopyOnWriteArraySet<ChatAnnotation>();
private final String nickname;
private Session session;
public ChatAnnotation() {
nickname = GUEST_PREFIX + connectionIds.getAndIncrement();
}
@OnOpen
public void start(Session session) {
this.session = session;
connections.add(this);
String message = String.format("* %s %s", nickname, "has joined.");
broadcast(message);
}
@OnClose
public void end() {
connections.remove(this);
String message = String.format("* %s %s", nickname, "has disconnected.");
broadcast(message);
}
@OnMessage
public void incoming(String message) {
// Never trust the client
String filteredMessage = String.format("%s: %s", nickname, HTMLUtil.cleanAll(message.toString()));
broadcast(filteredMessage);
}
private static void broadcast(String msg) {
for (ChatAnnotation client : connections) {
try {
client.session.getBasicRemote().sendText(msg);
} catch (IOException e) {
connections.remove(client);
try {
client.session.close();
} catch (IOException e1) {
// Ignore
}
String message = String.format("* %s %s", client.nickname, "has been disconnected.");
broadcast(message);
}
}
}
}
tomcat xml 설정
catalina.sh
JAVA_OPTS="-server -Xmx4000M -Xms4000M -Xmn1200M -XX:PermSize=256m -XX:MaxPermSize=256m -Xss512K -XX:+ExplicitGCInvokesConcurrent -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128M -XX:+UseFastAccessorMethods -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0"
JAVA_OPTS="$JAVA_OPTS -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider"
server. xml 설정
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="500" minSpareThreads="10"/>
nio
<Connector URIEncoding="UTF-8" executor="tomcatThreadPool"
asyncTimeout="900000" maxConnections="40000"
port="9079" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="40000" acceptCount="200" maxThreads="20000"
redirectPort="8443" />
주, tomcat 8 nio 최대 연결 수 설정 사용
maxConnections 10000
참고:http://tomcat.apache.org/tomcat-8.0-doc/config/http.html
tomcat / conf / Catalina / localhost / ROOT. xml 편집
<?xml version="1.0" encoding="UTF-8"?>
<Context path="" docBase="/Users/wbxie/work/workspace/chineseall/jmind-websocket/target/jmind-websocket-2.0.2-SNAPSHOT" reloadable="false" antiJARLocking="true" antiResourceLocking="false"></Context>
epoll 은 Liux 에서 시작 합 니 다:
JDK 6.0 과 JDK 5.0 update 9 의 nio 는 epoll (Linux 시스템 만 가능) 을 지원 하고 동시 다발 idle connection 에 큰 성능 을 향상 시 킬 수 있 습 니 다. 이것 이 바로 많은 네트워크 서버 응용 프로그램 에 필요 한 것 입 니 다.
사용 하 는 방법 은 다음 과 같 습 니 다.
-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider
예 를 들 어 Linux 에서 실행 되 는 Tomcat 에서 NIO Connector 를 사용 하면 epoll 을 사용 하면 성능 향상 에 도움 이 됩 니 다.
Tomcat 에서 이 옵션 을 사용 하려 면 catalina. sh 의 시작 부분 에 다음 줄 을 추가 하 는 것 입 니 다.
CATALINA_OPTS='-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider'
혹은
JAVA_OPTS="$JAVA_OPTS -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider"
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
iPad에서 WebSocket + Authorization이 연결되지 않음발단은 iPad에서의 개발 환경을 정비하려고 했기 때문이었습니다. VPS에 개발 환경을 넣을 수 있으면 편리하다고 생각해, 를 인스톨 해, 그대로는 누구라도 사용할 수 버리므로, Apache를 리버스 프록시로 해, ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.