2014-03-27 27 views
1

我有可以处理多个客户端(java)的多线程聊天java服务器。他们可以同时交谈。它们通过网络套接字连接。除了他们自己的谈话单词之外,我的目的是通过网络应用程序显示他们在网络浏览器中进行的谈话单词。我正在考虑JavaScript,但无法弄清楚如何为Web应用程序实现JavaScript,因为我需要将对象或数据从服务器(java)端传递到JavaScript端。java服务器和javascript之间的通信

以下是多线程服务器,这可以很好地处理多个客户端。

 public class GoodChatServer { 
     ……… 
public static void main(String[] args) throws Exception { 
    System.out.println("The chat server is running."); 
    ServerSocket listener = new ServerSocket(PORT); 
    try { 
     …. 
     } 
    } finally { 
    ….. 
    } 
} 
private static class Handler extends Thread { 


    ………. 
     this.socket = socket; 
    } 

    public void run() { 
     try { 

      in = new BufferedReader(new InputStreamReader(
       socket.getInputStream())); 
      out = new PrintWriter(socket.getOutputStream(), true); 
      while (true) { 
       out.println("SUBMITNAME"); 
       name = in.readLine(); 
       if (name == null) { 
       .. 
       } 

       synchronized (names) { 
        if (!names.contains(name)) { 
         names.add(name); 
         break; 
        } 
+0

你可以使用javascript创建一个GUI来做到这一点,并显示那里的对话。 – Divya

+0

感谢A5I-IE5! 但事情是我在我的java服务器中有protbuf数据,我想将它传递给javascript ....意味着如何从javascript ....访问我的服务器(java)的类或对象,并且还要传递protobuf。 – Samaya

+0

你想使用js rite调用java吗? – Divya

回答

1

在浏览器中使用JavaScript在Java服务器上显示聊天信息的方式有很多种。由于您已经在为Java客户端使用套接字,因此一种选择是使用WebSocketOracle provides an introduction to Java Websockets here,它应该帮助你与服务器端的东西。 Mozilla也有a tutorial for writing browser-based websockets here

您可能考虑的另一个选择是通过全球实时网络(如PubNub)中继您的数据。 PubNub提供了一个Java APIJavaScript API这将允许你发布从Java服务器邮件到您的JavaScript客户端,使用如下代码:

<script src="http://cdn.pubnub.com/pubnub.min.js"></script> 
<script>(function(){ 

var pubnub = PUBNUB.init({ 
    publish_key : 'demo', 
    subscribe_key : 'demo' 
}) 

pubnub.subscribe({ 
    channel : "my_chat_channel", 
    message : function(m){ alert(m) }, //Display the chat message 
})});</script> 

在Java服务器,你会写你的代码发布:

Pubnub pubnub = new Pubnub("demo", "demo"); 

Callback callback = new Callback() { 
    public void successCallback(String channel, Object response) { 
     System.out.println(response.toString()); 
    } 
    public void errorCallback(String channel, PubnubError error) { 
     System.out.println(error.toString()); 
    } 
}; 
pubnub.publish("my_chat_channel", "Here is my amazing chat message!" , callback); 

PubNub当前为free for up to 1 million messages per month。祝你好运!

+0

@ drnugent,感谢您的建议......我将定义寻找PubNub ..但我还有一个疑问,它会支持传输PROTBUF数据吗? – Samaya

+0

您应该可以序列化和反序列化任何数据,但是您可能会考虑使用JSON,因为您的消息将被JavaScript客户端读取。 – drnugent

相关问题