글 수정

작성자 본인만 수정할 수 있습니다

← 홈으로
2023.07.15 · 조회 10,310
php와 node.js, 웹소캣을 활용하고 데이터베이스를 이용하지 않는 외부 도메인에서 실행되는 실시간 채팅 코드 예제
<div><div><div><div><div><div>php와 node.js, 웹소캣을 활용하고 데이터베이스를 이용하지 않는 외부 도메인에서 실행되는 실시간 채팅 코드 예제</div></div></div><div><div></div><div></div></div></div></div></div><div><div><div><div><div>ChatGPT</div></div></div><div><div><div><div><p>PHP, Node.js, 웹 소켓을 활용하여 데이터베이스를 사용하지 않는 외부 도메인에서 실행되는 간단한 실시간 채팅 코드 예제를 제공하겠습니다. 이 예제에서는 웹 소켓을 사용하여 실시간 통신을 구현하고, 데이터베이스 없이 메모리에 채팅 메시지를 저장하여 처리합니다.</p><p><strong>1. 웹 소켓 서버(Node.js) 코드:</strong></p><p>먼저, Node.js 환경에 express와 socket.io 모듈을 설치해야 합니다.</p><pre><div><div>bashCopy code</div><div># Node.js 환경에서 실행&nbsp;npm install express socket.io</div></div></pre><p>이제 웹 소켓 서버를 구축하는 코드를 작성합니다.</p><pre><div><div>javascriptCopy code</div><div>// server.js&nbsp;const&nbsp;express =&nbsp;require('express');&nbsp;const&nbsp;app =&nbsp;express();&nbsp;const&nbsp;http =&nbsp;require('http').createServer(app);&nbsp;constio =&nbsp;require('socket.io')(http);&nbsp;// 채팅 메시지를 저장할 배열&nbsp;constchatMessages = [];&nbsp;// 정적 파일 제공 (index.html을 클라이언트로 제공)app.use(express.static('public'));&nbsp;// 웹 소켓 연결 이벤트io.on('connection',&nbsp;(socket) =&gt;&nbsp;{&nbsp;console.log('새로운 사용자가 연결되었습니다.');&nbsp;// 클라이언트가 채팅 메시지를 보낼 때의 이벤트 처리socket.on('chat message',&nbsp;(message) =&gt;&nbsp;{&nbsp;console.log('받은 메시지: '&nbsp;+ message);&nbsp;// 채팅 메시지를 배열에 저장&nbsp;chatMessages.push(message);// 모든 클라이언트에게 메시지 전송&nbsp;io.emit('chat message', message); });// 클라이언트가 연결을 해제할 때의 이벤트 처리&nbsp;socket.on('disconnect',&nbsp;() =&gt;&nbsp;{&nbsp;console.log('사용자가 연결을 해제했습니다.'); }); });&nbsp;const&nbsp;port =&nbsp;3000; http.listen(port,&nbsp;() =&gt;&nbsp;{&nbsp;console.log(`웹 소켓 서버가 포트&nbsp;${port}에서 실행중입니다.`); });</div></div></pre><p><strong>2. 클라이언트 (HTML, JavaScript, PHP) 코드:</strong></p><pre><div><div>htmlCopy code</div><div>&lt;!-- index.html --&gt;&nbsp;&lt;!DOCTYPE&nbsp;html&gt;&nbsp;&lt;html&nbsp;lang="en"&gt;&nbsp;&lt;head&gt;&lt;meta&nbsp;charset="UTF-8"&gt;&nbsp;&lt;meta&nbsp;name="viewport"content="width=device-width, initial-scale=1.0"&gt;&nbsp;&lt;title&gt;실시간 채팅&lt;/title&gt;&nbsp;&lt;/head&gt;&nbsp;&lt;body&gt;&nbsp;&lt;h1&gt;실시간 채팅&lt;/h1&gt;&nbsp;&lt;ul&nbsp;id="messages"&gt;&lt;/ul&gt;&nbsp;&lt;form&nbsp;id="chat-form"&gt;&nbsp;&lt;input&nbsp;type="text"&nbsp;id="input-message"&nbsp;autocomplete="off"&nbsp;/&gt;&nbsp;&lt;button&gt;전송&lt;/button&gt;&nbsp;&lt;/form&gt;&lt;script&nbsp;src="/socket.io/socket.io.js"&gt;&lt;/script&gt;&nbsp;&lt;script&gt;&nbsp;constsocket =&nbsp;io();&nbsp;const&nbsp;messages =&nbsp;document.getElementById('messages');&nbsp;const&nbsp;inputMessage =&nbsp;document.getElementById('input-message');&nbsp;functionappendMessage(message) {&nbsp;const&nbsp;li =&nbsp;document.createElement('li'); li.textContent&nbsp;= message; messages.appendChild(li); }&nbsp;// 채팅 메시지를 받을 때의 이벤트 처리socket.on('chat message',&nbsp;(message) =&gt;&nbsp;{&nbsp;appendMessage(message); });&nbsp;// 폼 제출 시 메시지 전송&nbsp;document.getElementById('chat-form').addEventListener('submit',&nbsp;(e) =&gt;&nbsp;{ e.preventDefault();const&nbsp;message = inputMessage.value.trim();&nbsp;if&nbsp;(message) { socket.emit('chat message', message); inputMessage.value&nbsp;=&nbsp;''; } });&nbsp;&lt;/script&gt;&nbsp;&lt;/body&gt;&nbsp;&lt;/html&gt;</div></div></pre><pre><div><div>phpCopy code</div><div>&lt;!-- send_message.php --&gt;&nbsp;&lt;?php&nbsp;if&nbsp;($_SERVER["REQUEST_METHOD"] ==&nbsp;"POST") {&nbsp;$message&nbsp;=&nbsp;$_POST['message'];&nbsp;if&nbsp;(!empty($message)) {&nbsp;// Node.js 서버로 채팅 메시지 전송&nbsp;$url&nbsp;=&nbsp;'http://localhost:3000';$data&nbsp;=&nbsp;array('message'&nbsp;=&gt;&nbsp;$message);&nbsp;$options&nbsp;=&nbsp;array(&nbsp;'http'=&gt;&nbsp;array(&nbsp;'method'&nbsp;=&gt;&nbsp;'POST',&nbsp;'header'&nbsp;=&gt;&nbsp;'Content-type: application/x-www-form-urlencoded',&nbsp;'content'&nbsp;=&gt;&nbsp;http_build_query($data), ), );&nbsp;$context&nbsp;=&nbsp;stream_context_create($options);&nbsp;$result&nbsp;=&nbsp;file_get_contents($url,&nbsp;false,&nbsp;$context);&nbsp;if&nbsp;($result&nbsp;===&nbsp;false) {&nbsp;echo&nbsp;'메시지 전송에 실패했습니다.'; } } }&nbsp;?&gt;</div></div></pre></div></div></div></div></div></div>