node.js 를 사용 하여 위 챗 애플 릿 실시 간 채 팅 기능 실현
그리고 실시 간 통신 이라는 키 워드 를 검색 해 웹 사 이 를 오 간다.하지만 붙 여 넣 기 복사 가 너무 많아 서 한참 을 찾 았 지만 원 하 는 것 을 찾 지 못 했 습 니 다.하지만 키워드 인 WebSocket 과 node.js 를 추출 한 다음 에 이 두 가지 가 무엇 인지,어떤 관계 인지 찾 아 보 니 알 게 되 었 습 니 다.
마지막 으로 첫 번 째 로 해 야 할 일 은 node.js 로 서 비 스 를 구축 하 는 것 이 라 고 확정 했다.
1.먼저 홈 페이지 에서 node.js 를 다운로드 합 니 다링크 다운로드
설치 가 간단 합 니 다.다운로드 한 파일 을 두 번 누 르 면 바로 다음 단계 입 니 다.특별한 선택 이 없습니다.경 로 는 기본 값 이면 됩 니 다.
명령 행 창 을 열 어 node-v 출력 버 전 을 입력 하여 설치 에 성 공 했 는 지 확인 할 수 있 습 니 다.사실 이것 도 필요 없습니다.
2.그리고 폴 더 를 새로 만 듭 니 다.
그리고 명령 으로 이 디 렉 터 리 로 이동 합 니 다.이 파일 에 우리 가 사용 할 모듈 을 설치 합 니 다.모듈 을 설치 하기 전에 설정 파일 을 만들어 야 합 니 다.그렇지 않 으 면 오류 가 발생 할 수 있 습 니 다.(어쨌든 제 가 보 고 했 습 니 다)
프로필 생 성 명령:
npm init -f
실행 후 이 파일 아래 에 package.json 이라는 프로필 이 하나 더 있 는 것 을 볼 수 있 습 니 다.먼저 상관 하지 않 아 도 됩 니 다(뒤에 도 관여 하지 않 았 습 니 다).그 다음 에 모듈 을 계속 설치 하 는 작업 을 할 수 있 습 니 다.처음에 나 는 설 치 된 socket.io 였 는데,나중에 작은 프로그램 이 전혀 사용 할 수 없다 는 것 을 알 게 되 었 기 때문에,여기 서도 socket.io 는 말 하지 않 았 다.우리 여기 ws 써 요.
설치 ws 명령:
npm install --save ws
(마 운 트 해제 모듈 명령:npm uninstall 모듈 이름)3.모듈 을 설치 한 후 디 렉 터 리 아래 에.js 파일 을 만 듭 니 다.저 는 뉴스.js 입 니 다.
내 가 있 는 이곳 은 틀림없이 너희들 의 서류 보다 더 많 을 것 이 니 신경 쓰 지 마라.
그리고 이.js 파일 을 열 고 서버 코드 를 편집 하기 시작 합 니 다.이것 은 메모 장 을 사용 하 든 다른 소프트웨어 를 사용 하 든 상관 없습니다.
이것 은 가장 간단 한 기본 적 인 연결 을 열 고 응답 하 는 코드 입 니 다.
// ws
const WebSocket = require('ws');
// port
const wss = new WebSocket.Server({ port: 80});
//
wss.on('connection', function connection(ws) {
console.log(' ');
//
ws.on('message', function incoming(data) {
console.log(' ');
//data , clients.foreach
wss.clients.forEach(function each(client) {
// data,
client.send(data);
});
});
});
여기에 약간 완벽 한 코드 를 붙 여 놓 았 습 니 다.여 기 는 데이터베이스 에 저 장 된 메시지 입 니 다.my sql 을 사용 하기 때문에 my sql 모듈 을 설치 해 야 합 니 다.npm install --save mysql
코드:여기에 많은 주석 코드 가 있 는데,모두 내 가 다 듬 을 때 사용 하 는 것 이 니,무시 하거나 삭제 할 수 있다.
이 MySQL 의 데이터 연결 은 자신의 수정 에 따라 표 도
제 가 사용 하 는 시 계 는 두 필드 id,msg 입 니 다.
var http=require('http');
var qs = require('querystring'); //
var ws=require('ws');
var server=http.createServer(function (req, res) {
res.end("This is a WebSockets server!");
});
var url = require('url');
//
function ClientVerify(info) {
var ret = false;//
//url
var params = url.parse(info.req.url, true).query;
//console.log(groupid);
//groupid=params['groupid']
//
// wss.clients.forEach(function each(client) {
// client.send('233');
// });
return true;
}
var wss = new ws.Server( { server: server,verifyClient: ClientVerify } );
/*//
var mysql = require('mysql');
//
var connection = mysql.createConnection({
host : '58.87.94.16',
user : 'root',
password : 'root',
database : 'bootdo'
});*/
//
var mysql = require('mysql');
//
const pool = mysql.createPool({
host : '58.87.94.16', //
user : 'root', //
password : 'root', //
database : 'bootdo' //
})
/* sql values
values mysql '?'
query(`select * from my_database where id = ?`, [1])
pool.query, */
let query = function(sql,values,callback){
pool.getConnection(function(err,conn){
if(err){
callback(err,null,null);
}else{
conn.query(sql,values,function(err,results,fields){
//
conn.release();
//
callback(err,results,fields);
});
}
});
};
module.exports=query;
wss.on('connection', function connection(ws) {
console.log(' !');
//console.log(ws);
//
var sql='select * from hi_test where groupid=1';
console.log('sql ',sql);
query(sql,function (err,res,fields) {
console.log('sql :', res);
if(res!=null){
ws.send(JSON.stringify(res));
}
});
//
ws.on('message', function incoming(data) {
console.log(' message:',data);
//
sql="insert into hi_test(msg) values(?)";
console.log('sql ',sql);
query(sql,data,function (err,res,fields) {
console.log('sql :',res);//res.insertId
});
var sendData=JSON.stringify([{msg:data}])
/**
*
* wss.clients
*/
wss.clients.forEach(function each(client) {
client.send(sendData);
});
});
});
server.listen(80, function listening() {
console.log(' !');
});
/* get
var options = {
hostname: 'www.tjjxsoft.cn',
path: '/attendanceParameter/getAttendanceParameter/13',
method: 'GET'
};
var req = http.request(options, function (res) {
console.log(' : ' + res.statusCode);
res.on('data', function (chunk) {
console.log(' : ' + chunk);
});
});
req.on('error', function (e) {
console.log('problem with request: ' + e.message);
});
req.end();*/
/*
/!* http *!/
var app = require('http').createServer()
/!* socket.io*!/
var io = require('socket.io')(app);
/!* , , *!/
var PORT = 80;
/!* *!/
app.listen(PORT);
/!* *!/
var users = [];
/!**
*
*io socket
* socket socket
*io socket
*!/
io.on('connection', function (socket) {
/!* on, emit , *!/
socket.on('login',function(data){
console.log(' :')
console.log(data);
users.push({
username:data.username
});
/!* add *!/
io.sockets.emit('add',data)
})
})
console.log('app listen at'+PORT);*/
그리고 명령 행 에 node ws.js(파일 이름)를 입력 하고 돌아 오 라 고 명령 하면 서 서 서 비 스 를 시 작 했 습 니 다.4.지금 서비스 가 시작 되 었 습 니 다.다음은 애플 릿 쪽 을 만 듭 니 다.
직접 코드 붙 이기:
wxml:
<view class='homeView'>
<scroll-view scroll-y style="height:500px;" scroll-top='{{scrolltop}}'>
<view class='listView'>
<block wx:for="{{serverMsg}}" wx:key='*this'>
<!-- -->
<view wx:if="{{item.user.id!=userInfo.userId}}" class='leftView'>
<view class='name'>{{item.user.name}}</view>
<view class='imgmsgleft'>
<view>
<!-- -->
<image class='touimg' src='https://www.tjjxsoft.cn/static/images/img005.png'></image>
</view>
<view>{{item.msg}}</view>
</view>
</view>
<view wx:else class='rightView'>
<view class='name'>{{item.user.name}}</view>
<view class='imgmsg'>
<view>{{item.msg}}</view>
<view>
<!-- -->
<image class='touimg' src='https://www.tjjxsoft.cn/static/images/img005.png'></image>
</view>
</view>
</view>
</block>
</view>
</scroll-view>
<view class='sendView'>
<input bindinput='sendTextBind' placeholder=" " value='{{sendText}}' />
<button bindtap='sendBtn' type="primary"> </button>
</view>
</view>
js:
var app = getApp();
Page({
data: {
socket_open: false,//
sendText: "",//
serverMsg: [],//
userInfo: { userId: 1, name: " ",img:' '},//app.appData.userInfo,
scrolltop: 999
},
/** */
sendTextBind: function(e) {
this.setData({
sendText: e.detail.value
});
console.log(this.data.sendText);
},
/** */
sendBtn: function(e) {
console.log(' !');
var msgJson = {
user: {
id: this.data.userInfo.userId,//app.appData.userInfo.userId, // ID
name: this.data.userInfo.name, //
img: this.data.userInfo.img, //
},
msg: this.data.sendText,//
groupid:1
}
//
this.send_socket_message(JSON.stringify(msgJson));
this.setData({
sendText: ""// ,
});
},
onLoad: function(options) {
// app.login();
// this.setData({
// userInfo: app.appData.userInfo
// });
//
this.wssInit();
},
wssInit() {
var that = this;
//
wx.connectSocket({
url: 'ws://localhost'//app.appData.socket
})
// WebSocket 。
wx.onSocketOpen(function(res) {
console.log('WebSocket !');
that.setData({
socket_open: true
});
});
// WebSocket 。
wx.onSocketMessage(function(res) {
console.log(' :', res);
var server_msg = JSON.parse(res.data);
console.log(server_msg);
if (server_msg != null) {
var msgnew = [];
for (var i = 0; i < server_msg.length; i++) {
msgnew.push(JSON.parse(server_msg[i].msg));
}
msgnew=that.data.serverMsg.concat(msgnew);
that.setData({
serverMsg: msgnew,
scrolltop: msgnew.length * 100
});
console.log(that.data.serverMsg);
}
});
// WebSocket 。
wx.onSocketError(function(res) {
console.log('WebSocket , !', res)
});
},
send_socket_message: function(msg) {
//socket_open, true,
if (this.data.socket_open) {
wx.sendSocketMessage({
data: msg
})
}
}
})
wxss:
.homeView {
border-top: 1px solid #ededed;
}
.listView{
padding-bottom: 50px;
}
.listView>view {
padding: 10px;
}
.rightView {
text-align: right;
}
.imgmsgleft {
display: flex;
justify-content: flex-start;
align-items: center;
}
.imgmsgleft>view:last-child {
border: solid 1px gray;
padding: 10px;
border-radius: 6px;
}
.imgmsg {
display: flex;
justify-content: flex-end;
align-items: center;
}
.imgmsg>view:first-child {
border: solid 1px gray;
padding: 10px;
border-radius: 6px;
background-color: green;
}
.touimg {
width: 50px;
height: 50px;
}
.name {
font-size: 14px;
color: gray;
}
.sendView {
display: flex;
width: 100%;
position: fixed;
bottom: 0px;
border-top: 1px #ededed solid;
background-color: white;
}
.sendView>button {
width: 20%;
}
.sendView>input {
width: 80%;
height: auto;
}
효과 그림:미리 볼 때 디 버 깅 을 열 어야 합 니 다.WSS 프로 토 콜 이 아니 기 때문에 직접 사용 할 수 없습니다.
총결산
위 에서 말 한 것 은 편집장 이 소개 한 node.js 를 사용 하여 위 챗 애플 릿 실시 간 채 팅 기능 을 실현 하 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.편집장 은 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Node.js를 AWS서버에서 사용하는 실습간단한 예제와 함께 AWS에서 Node.js를사용하는 법을 배워보도록 하겠다. 해당 github에 있는 레포지토리로 사용을 할 것이다. 3000번 포트로 Listen되는 예제이고 간단히 GET, POST, DELET...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.