2017년 8월 8일 화요일

nodejs, Java로 서로 다른 디바이스에서 채팅 메세지 공유(Socket.io 사용)


java 프로젝트(servlet,spring 아님)를 만들고 거기에 먼저 socket.io를 사용할수 있게
환경설정을 해주자

1. pom만들기
 2. pom 안에 닫히는 build 닫히는 project 사이에 사용할 라이브러리 소스를 넣어준다.

                           <해당소스>
1
2
3
4
5
6
7
   <dependencies>
      <dependency>
        <groupId>io.socket</groupId>
        <artifactId>socket.io-client</artifactId>
        <version>1.0.0</version>
      </dependency>
    </dependencies>
cs


환경설정을 마쳤으면 새로운 클래스를 만들어주자


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
public class SocketIOClass implements Emitter.Listener{
    
    private io.socket.client.Socket socket = null;
            
    public SocketIOClass() {
        // TODO Auto-generated constructor stub
        try {
            socket = IO.socket("http://211.110.165.201:1005");
            socket.connect();
            
            socket.on("subscribe"this); //subscribe
            JSONObject jobj = new JSONObject();
            jobj.put("msg""init");
            jobj.put("id""jdh1");
            socket.emit("init",jobj);
            
        } catch (Exception e) {
            // TODO: handle exception
        }
    }
    
    public void send(String id, String msg) throws Exception{
        try {
            JSONObject jobj = new JSONObject();
            jobj.put("msg", msg);
            jobj.put("id", id);
            socket.emit("publish",jobj);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
    @Override
    public void call(Object... arg0) {
        // TODO Auto-generated method stub
        String msg = arg0[0].toString();
        System.out.println("받은내용:"+msg);
        
    }
    
}
 
cs

메인클래스에서 실해하기. run as 버튼을 누르면 콘솔에 실행된다.

1
2
3
4
5
6
7
8
9
public class Main {
 
    public static void main(String[] args) throws Exception {
        SocketIOClass s = new SocketIOClass();
        s.send("jdh""sendig");
    }
}
 
 
cs


                                                       <실행화면>


==============여기서부터는 nodejs (visualCode로 작성) 한 코드이다. ========
(수업시간에 빠져 개념정리가 필요함 )


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
var express = require('express');
var router = express.Router();
//socket.io.라이브러리 ---------------
 
var http = require('http').createServer(function(req, res){
}).listen(1006);
var io = require("socket.io").listen(http);
 
io.sockets.on('connection', function(socket){
  socket.on('init', function(data){
    socket.join(data.id);
  });
 
  socket.on('publish', function(data){
    io.sockets.emit('subscribe', {
      id : String(data.id),  msg : String(data.msg)
    });
  });
});
 
 
//127.0.0.1:3000/socket
router.get('/chat', function(req, res, next) {
  res.render('chat',{});
});
 
var http = require('http').createServer(function(req, res){
}).listen(1005);
var io = require("socket.io").listen(http);
 
io.sockets.on('connection', function(socket){
  socket.on('init', function(data){
    socket.join(data.id);
  });
 
  socket.on('publish', function(data){
    io.sockets.emit('subscribe', {
      id : String(data.id),  msg : String(data.msg)
    });
  });
});
 
 
module.exports = router;
cs

채팅 화면 html이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<!DOCTYPE html>
<html>
 <head>
   <title>채팅</title>
   <link rel='stylesheet' href='/stylesheets/style.css' />
   <script src="/javascripts/jquery.js"></script>
   <script src="http://211.110.165.201:1005/socket.io/socket.io.js"></script>
   <script>
     $(document).ready(function(){
        var socket = io.connect("http://211.110.165.201:1005");
 
        socket.on('connect', function(){
          //최초 접속시
          socket.emit('init', {id:'jdh', msg:'hello'});
 
          //서버에서 메세지가 오면 textarea에 표시
          socket.on('subscribe', function(data){
              var tmp = $('#txt_out').val();
              $('#txt_out').val(data.id+","+data.msg+"\n"+tmp);
 
              var tmp1 = $('#div_out').html();
              $('#div_out').html(data.msg+"<br />"+tmp1);
          });
        });
       
        $('#btn_msg').click(function(){
           var txt = $('#txt_msg').val();
           socket.emit('publish', {id:'jdh', msg:String(txt)});
        });
     });
   </script>
 </head>
 <body>
   <input type="text"  id="txt_msg" />
   <input type="button"  id="btn_msg" value="보내기" />
   <textarea rows="10" style="width:100%" id="txt_out"></textarea>
 
   <div id="div_out"></div>
 </body>
</html>
 
cs





댓글 없음:

댓글 쓰기