[ 작업 환경 ]

 

Python 3.6

Centos 7

 

 

 

 

 

1. flask-socketio 설치

 

pip install flask-socketio

 

 

 

 

 

2. SocketIO 가져오기

 

# vim app001/routes.py

...

# SocketIO - 채팅기능
from flask_socketio import SocketIO

...

 

 

 

 

 

3. SocketIO 서버 가동

 

# vim app001/routes.py

...

# Socketio 가동
socketio = SocketIO(app)
if __name__ == '__main__':
    socketio.run(app, debug=True)

...

 

 

 

 

 

4. 채팅 서버 라우트 세팅

 

# vim app001/routes.py

...

@app.route('/sessions')
def sessions():
    return render_template('session.html')

def messageReceived(methods=['GET', 'POST']):
    print('message was received!!!')

@socketio.on('my event')
def handle_my_custom_event(json, methods=['GET', 'POST']):
    print('received my event: ' + str(json))
    socketio.emit('my response', json, callback=messageReceived)
    
...

 

 

 

 

 

5. 채팅 페이지 템플릿 html

 

아래 전체 소스의 23번째 줄에 domain_name과 port를 상황에 맞게 설정해줍니다.

필자의 경우 http가 아니라 https를 사용하고 있어서 그 부분도 함께 수정해주었습니다.

일반적으로 테스트 환경에서 local로 작업하신다면, http://localhost:5000 형태이니 그에 맞춰 수정해주시면 됩니다.

// html template
        var socket = io.connect('http://' + domain_name + ':' + port);

// 일반적인 local 테스트 환경인 경우
        var socket = io.connect('http://localhost:5000');
<!-- vim app001/templates/sessions.html -->

<!DOCTYPE html>
  <html lang="en">
  <head>
    <title>Flask_Chat_App</title>
  </head>
  <body>

    <h3 style='color: #ccc;font-size: 30px;'>No message yet..</h3>
    <div class="message_holder"></div>

    <form action="" method="POST">
      <input type="text" class="username" placeholder="User Name"/>
      <input type="text" class="message" placeholder="Messages"/>
      <input type="submit"/>
    </form>

    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.min.js"></script>
    <script type="text/javascript">
      var socket = io.connect('http://' + domain_name + ':' + port);

      socket.on( 'connect', function() {
        socket.emit( 'my event', {
          data: 'User Connected'
        } )
        var form = $( 'form' ).on( 'submit', function( e ) {
          e.preventDefault()
          let user_name = $( 'input.username' ).val()
          let user_input = $( 'input.message' ).val()
          socket.emit( 'my event', {
            user_name : user_name,
            message : user_input
          } )
          $( 'input.message' ).val( '' ).focus()
        } )
      } )
      socket.on( 'my response', function( msg ) {
        console.log( msg )
        if( typeof msg.user_name !== 'undefined' ) {
          $( 'h3' ).remove()
          $( 'div.message_holder' ).append( '<div><b style="color: #000">'+msg.user_name+'</b> '+msg.message+'</div>' )
        }
      })
    </script>

  </body>
  </html>

 

 

 

 

 

6. 아래 환경일 때, 다음과 같이 요청해 웹으로 페이지를 띄울 수 있습니다.

 

 - 도메인 명

http://domain.example.com 

 - 포트

5001

 - 라우트

sessions

https://domain.example.com:5001/sessions

 

 

 

 

 

 

7. 채팅 해보기

 

 

 

 

 

 

8. 새로고침 후 채팅 다시 해보기

 

우측 사용자만 새로고침하여 채팅을 이어서 해봅니다.

정상적으로 잘 채팅이 되는 것을 알 수 있습니다.

 

 

 

 

+ Recent posts