PHP

php용 wss 웹소켓 서버 구현하기

미스털이 사용자 2023. 11. 8. 13:53
반응형

php의 웹소컷 서버사이드는 주로 ws(http용) 프로토콜을 이용해왔다.

 

그래서 https(ssl)프로토콜을 장착하고 나서 ws웹소켓 프로토콜을 사용할 수 없게되자, php에서 wss를 운용할 수 있는 방법을 찾아봤다.

 

1) 우회하는 방식 쓰기

- 이건 비추천한다.

- 이걸 사용하는 내내 웹서버가 종종 다운됐기 때문이다.

 

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

ProxyPass /wss2/ ws://웹주소:소켓통신용포트/
 

위의 3가지 모듈(mod_proxy.so, mod_proxy_http.so, mod_proxy_wstunnel.so)을 쓸 수 있게 만들고,

ProxyPass명령을 이용해 우회시키는 방법이다.

 

즉, /wss2/의 경로를 입력하게 되면,

ws://웹주소:소켓통신용포트/로 가게끔 하는 것이다.

 

이를 실제 웹클라이언트용 소스에서

var websocket = new WebSocket("wss://웹주소/wss2/chatting/php-socket.php"); 
 

위와 같이 써주면

wss://웹주소/wss2/chatting/php-socket.php

ws://웹주소:소켓통신용포트/chatting/php-socket.php

으로 인식되는 것이다.

 

2) wss 프로토콜 전용 소켓서버 구축하기

- 두번째 방법이 안정적이고 좋은 것 같다.

- 마침 오픈소스도 있으니 링크를 걸어놓겠다.

 

https://github.com/napengam/phpWebSocketServer

 

위의 소스를 다운받아 서버에 설치하고

유의할 점을 몇가지 적어주겠다.

/server/websock.ini 설정파일을 꼭 입력해야한다.

 

adress='wss://웹주소:소켓통신용포트'
logfile=로그남길 경로
console=false
certFile='certificate.crt파일 경로'
pkFile='private.key파일 경로'
 

대강 이런식으로 남겨야 한다.

 

그리고 /webClient/에 test용 파일이 있는데,

대표사진 삭제

사진 설명을 입력하세요.

이런식으로 되어있다.

여기에

$Address = 'wss://웹주소:소켓통신용포트';
 
 

이런 변수를 지정해주면 echo, broadcast등 소켓통신을 사용할 수 있다.

 

해당 소켓통신엔 모드에 따라 기능이 나눠지는데,

ready : 초기화

broadcast : 자신을 제외한 남들에게 메세지를 송신

이런 식으로 나뉜다.

 

이를 이용해 커스터마이징을 하면 채팅창 구현, 실시간 알림 서비스등을 구현할 수 있을 것이다.

반응형