WebSocket + Jetty Embedded = problem.

0

Cześć.
Siedzę nad tym od 8:00 rano i nie wiem, co jest nie tak.
Ściągnąłem sobie źródła do tutoriala dla Websocketów (http://webtide.intalio.com/2011/08/websocket-example-server-client-and-loadtest/) i nie działają, uruchamiam klasę main, odpala się serwer, po czym wchodzę do plik index.html i w ogole nie reaguje.

Może mi ktoś polecić dobry tutorial do Websocketów?
Od 8:00 przerobiłem chya z 5 różnych opcji, jetty 7.4.5, jetty 7.5.4 i jetty 8.x... i kuźwa nie potrfię nic przesłać do serwera ze strony html.

Proszę o pomoc.
Pozdrawiam.

0

Nie wszystkie przeglądarki to obsługują (Browser support):
http://en.wikipedia.org/wiki/WebSocket
W przypadku Firefoksa: "Gecko-based browsers versions 6, 7 and 8-beta implement the WebSocket object as "MozWebSocket",[27] requiring extra code to integrate with existing WebSocket-enabled code"

0

Cześć.
Do testów korzystam z Chrome'a który to ma.
Znalazłem inny tutorial, ale znowu nie działa, używa jQuery, niby javascript działa, ale znowu nic się nie dzieje.

index.html:

<html>
<head>
<meta name="description" content="HTML5 WebSocket Chat" />
<meta name="keywords" content="HTML5,WebSocket,JavaScript" />
<meta name="author" content="Andy Moncsek" />
<meta charset="UTF-8" />
<title>Hello world</title>
<script type="text/javascript" charset="utf-8" src="js/jquery-1.3.2.js"></script>
<link type="text/css" rel="stylesheet" href="css/style.css" />
<script type="text/javascript">
	var ws;

	$(document).ready(
			function() {
				ws = new WebSocket("ws://localhost:8080/chat/send");
				ws.onopen = function(event) {
					
				}
				ws.onmessage = function(event) {
					var $textarea = $('#messages');
					$textarea.val($textarea.val() + event.data + "\n");
					$textarea.animate({
						scrollTop : $textarea.height()
					}, 1000);
				}
				ws.onclose = function(event) {
					
				}

			});

	function sendMessage() {
		var message = $('#username').val() + ":" + $('#message').val();
		ws.send(message);
		$('#message').val('');
	}
</script>
</head>
<body>
	<div id="body">
		<div id="menu">
			<p class="welcome">
				Welcome,<input id="username" value="anonymous" />			
			</p>
			<div style="clear: both"></div>
		</div>

		<div id="chatbox">
			<textarea id="messages" rows="16" cols="48" readonly="readonly"></textarea>
		</div>

		<form name="message" action="">
			<input name="usermsg" type="text" id="message" size="63" /> <input
				type="button" name="submitmsg" value="Send..."
				onclick="sendMessage();" />
		</form>
	</div>
</body>
</html> 

do tego mam klasę serwletu i klasę gniazdka.

package pl.black007;

import java.io.IOException;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.eclipse.jetty.websocket.WebSocket;
import org.eclipse.jetty.websocket.WebSocketServlet;

public class ChatServlet extends WebSocketServlet {

	private static final long serialVersionUID = -105191886483239820L;
	private final Set<ChatSocket> sockets = new CopyOnWriteArraySet<ChatSocket>();

	@Override
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		System.out.println("ChatServlet doGET!");
		getServletContext().getNamedDispatcher("default").forward(request,
				response);
	}

	@Override
	public WebSocket doWebSocketConnect(HttpServletRequest arg0, String arg1) {
		System.out.println("ChatServlet doGET!");
		return new ChatSocket(sockets);
	}

} 
package pl.black007;

import java.io.IOException;
import java.util.Set;

import org.apache.log4j.Logger;
import org.eclipse.jetty.websocket.WebSocket;

public class ChatSocket implements WebSocket.OnTextMessage {

	private static final Logger logger = Logger.getLogger(ChatSocket.class);
	private final Set<ChatSocket> sockets;
	private Connection conn;

	public ChatSocket(Set<ChatSocket> sockets) {
		System.out.println("ChatSocket constructor!");
		this.sockets = sockets;
	}

	@Override
	public void onClose(int closeStatus, String message) {
		System.out.println("ChatSocket close!!");
		sockets.remove(this);
	}

	@Override
	public void onOpen(Connection connection) {
		System.out.println("ChatSocket open!");
		sockets.add(this);
		this.conn = connection;
	}

	@Override
	public void onMessage(String message) {
		System.out.println("ChatSocket message!");
		for (ChatSocket socket : sockets) {
			try {
				socket.conn.sendMessage(message);
			} catch (IOException e) {
				logger.error(e, e);
			}
		}
	}
}
 

I jestem w ciemnej d...
Nie wiem, co jest nie tak.
W outpucie w eclipsie nie wypisują mi się te sysouty... :/

0

mnie pomógł http://angelozerr.wordpress.com/category/websockets/
generalnie udało sie uruchomić embedded jetty z obsługą websocketów (działa na FF, i Operze)

inny ciekawy projekt - korzysta z websocket gdy to możliwe i dla niewspierających przeglądarek przełacza się na Comet to ape-project.org

1 użytkowników online, w tym zalogowanych: 0, gości: 1