CI 묻고 답하기

제목 node js와 CI
글쓴이 라에 작성시각 2016/06/02 17:00:18
댓글 : 12 추천 : 0 스크랩 : 1 조회수 : 22387   RSS

안녕하세요

CI로 사이트를 개발하고있는데, 실시간채팅때문에 node js를 써보는게 어떠냐는얘기가 나왔는데, 찾아봐도 둘을 같이써서 실시간채팅을 구현했다는 글은 못본것같아서요 ㅠ

혹시 node.js와 CI 가 같이 사용이 가능하긴 한걸까요?

호스팅은 카페24 작업중입니다.

 다음글 Message: Only variables should... (4)
 이전글 controller의 $data 변수 내용이 view에... (4)

댓글

한대승(불의회상) / 2016/06/02 17:10:10 / 추천 1

같이 사용한다는 의미가 정확히 어떤건가요?

kaido / 2016/06/02 17:10:18 / 추천 1

깡패24 웹호스팅이면 node.js 사용 안될 겁니다.

node.js 호스팅을 또 따로 운영하고 있어서...

가상 이나 단독 호스팅이면 가능 합니다.

 

node.js 와 CI는 같이 사용이 가능 합니다.

제가 만들어 보았고요 ( ..)

[제가 추천 한것 일지도 모르겠...]

 

일단 node.js 는 스크립트 라인에서 놀고, CI는 PHP 에서 놉니다.

단순히 PHP에다 script 사용 하는 거랑 똑같은 겁니다.

 

1단계로 먼저 node.js 로 채팅을 구현 하시고 그걸 php 페이지에서 script 열고 사용 한다고 생각 하세요.

2단계로 php 파일을 CI 에맞게 수정 하시면 됩니다.

사실상 말이 연동이지, PHP 페이지 하나 열고 스크립트 하나 돌리는 거랑 다른게 없어요.

 

kaido / 2016/06/02 17:21:50 / 추천 0

추가로...

안드로이드에도 websocket 패키지가 있는데  php websocket 이 없을까? 하고 찾아보니 좋은게 있군요.

http://socketo.me/docs/hello-world

 

이용 방법이 무궁무진해질거 같습니다.

라에 / 2016/06/02 17:33:04 / 추천 0

불의회상 /

node.js와 코드이그나이터를 같이 사용한 예제를 찾아보려고했는데 제가 검색을 잘 못한것인지

원하는결과가 나오지않아서 node.js를 설치한 서버에서는 CI를 같이 사용할수없는것인가 했던거였어요 ;ㅅ;

node js는 일반 서버에서 사용이 불가능한것같아보여서.. 현재 서버에서도 사용이 가능한건가..했었던거에요.

 

kaldo /

실시간채팅이 꼭 필요한기능이었는데, 우선 된다고하니 너무 반가운 소식이네요!!

node.js로 채팅구현 후 스크립트에서 사용하는 방식이라면..

우선 node설치후 서버에서 채팅이되는지 확인을 다 한 후 php 스크립트단에서 호출만 하면 되는건가요?

지금 개발하는게.. 처음건들이는것 3개(CI, bootstrap, node....)를 한꺼번에 써야해서 초급개발자인 저에겐 너무 힘이드네요ㅠㅠ

 

라에 / 2016/06/02 17:47:51 / 추천 0

kaldo /

감사합니다 kaldo님~~ 그리고 질문이 한가지 더 있어요!

현재 앱과 db가 통신을 해야하는부분때문에 library에 함수를 만들어두고, json으로 결과를 리턴해주는 방식으로 개발을 했어요.

그래서 웹사이트에 앱과의 통신부분이 들어가있다보니, 사이트하나에서 앱/웹을 같이 컨트롤하게 됐는데

이 경우에 웹사용자와 앱사용자가 채팅을 하는 경우에는 어떻게 통신하는게 좀 더 효율적일까요?

너무 기반지식없이 질문하는것같아서 염치없네요 ㅠ

 

앱과 PC 모두 (라고 해야할까요;)로 사용하고있는데

그럼 앱사용자들과 website 사용자들끼리 채팅을 하는 경우도있어요.

동시접속자수가 꽤 많을걸 예상하고 만들어야하는 상황인데 어떤것이 더 나을까요

테러보이 / 2016/06/02 17:53:33 / 추천 0
@kaldo
웹소켓이 엄청좋기는 한데.... ie가 문제입니다 ㅎㅎㅎ

보시면 얼마나 고민 했는지 아실것 같네요...

http://blog.z9n.net/126
박준영 / 2016/06/02 18:00:05 / 추천 0

사용자가 적다면 ajax polling 으로 한 0.5s 마다 업데이트해서 채팅을 만들수는 있죠.

다만 사용자가 많아지면 php로 socket 프로그래밍을 하시는게 좋을거 같애요.

웹호스팅이 아니라 서버 호스팅이라면 사용자 인증정보를 redis로 공유해서 nodejs socket io 로 채팅구현하신다음에 쓰시면 될것같습니다. 

한대승(불의회상) / 2016/06/02 18:39:16 / 추천 0
node.js 와 php 연동으로 찾아 보셔야 할 겁니다. ^^
변종원(웅파) / 2016/06/02 21:33:02 / 추천 0
충분히 큰 사이트 만들 수 있습니다. (제가 하는 일이 그거입니다. ㅎㅎ)
라에 / 2016/06/02 23:05:34 / 추천 0

와 퇴근하는사이에 엄청난 댓글이 ㅎㅎㅎ 다들 감사합니다.

언젠간 저도 질문게시판에 답변을 달수있는 날이 오길 바라며 오늘도 헤딩하며 배워야겠어요!

 

kaido / 2016/06/03 09:01:41 / 추천 0

@테러보이

상관없습니다. ㅎㅎ  

제가 링크 올려놓은 웹소켓 예제는 웹소켓을 쏘는 부분이 html5 로 되어 있어서 안 되는거고,

node.js 로 해당 부분을 대체 하면 가능 합니다.

[저도 예제가 html5 가 입력을 담당 하고 있어서 어차피 node 필요하네 생각이 들더군요.]

 

굳이 ajax 풀링 안해도 기존에 php 데몬 소켓으로 만들어도 상관없지만, php 소켓이 좀 무거워요.

[제가 php3.x 버전때 테스트한 기억이라서 그런지 모르겠다만...]

 

그래서 대체 수단인 websocket를 사용하려는 것이죠.

그리고 websocket 을 이용해야 jquery 와의 연동이 편해서 좋죠.

 

아 참고로 websocket 을 사용하면 앱에서 websocket 패키지 사용하시면 바로 받아서 보실수 있습니다.

PC[웹] & 앱 연동 심심해서 한번 만들어 봤었거든요. 

 

PS. 채팅 구현 소스는 쉽게 구할 수 있어도, 그걸 뒷 받침 하는 이론을 소홀히 하셔서는 안 됩니다.

천재작곡가 / 2016/06/03 23:08:30 / 추천 0

전 홈페이지 자체는 CI로 구성해놓고

socket.io 클라이언트 자바스크립트를 넣어서

nodejs 연동해서 사용하고있습니다.

 

nodejs 서버는 socket.io 부분만 구현해서 에코서버로 쓰구요

 

인터넷 떠도는 예제는 웹서버+소켓서버 같이 구현이 되어있긴 하더라구요

 

참고하시라고 제 소스 올려드립니다.

server.js 

// 소켓 서버 Init
var io = require('socket.io').listen(8001);

// 현재 들어와있는 사람 리스트
var userList = [];

io.sockets.on('connection', function(socket) {
	
	// 기본 룸은 default 로
	socket.room = "default";
	
	// 접속시
	socket.on('connect', function(data) {
		// 이름이 있을경우만 실행
		if( data.name ) {
			socket.nickname = data.name;
			var obj = {
				socket_id : socket.id,
				nickname : data.name,
				room : socket.room
			}
			userList.push(obj);
			io.sockets.emit('connect', data);
		}
	});
	
	socket.on('disconnect', function(){
		if(socket.user_idx) {
			deleteUser();
		}
	});
	
	socket.on('action', function(data) {
		io.sockets.emit('action', data);
	});
	
	var getUser = function() {
		return userList;
	}
	
	var refreshUser = function() {
		io.sockets.emit('userlist', userList);
	}
	
	var deleteUser = function() {
		for (var i in userList) {
            if(userList[i].socket_id == socket.id){
                delete userList[i];
                userList.splice(i, 1)
            }
        }
        refreshUser();
	}
});

 

클라이언트쪽

<script src="//cdn.socket.io/socket.io-1.4.5.js"></script>

<script>
var socket = io.connect( '127.0.0.1:8001');
socket.emit('site_join', {
    id : "<?=$this->member->info("userid")?>",
    nick : "<?=$this->member->info("nick")?>",
    ip : <?=ip2long($this->input->ip_address())?>,
    idx : <?=$this->member->info("idx")?>,
    key : "<?=$this->input->cookie("st_singletown")?>",
    icon : "<?=$this->member->info("icon")?>"
});

socket.on('user_list', function(data) {    
    $("#current_visit").empty();
    var user_list = [];
    for(var row in data) {
        
        user_list.push({
            "idx" : data[row].idx,
            "nick" : data[row].nick,
            "icon" : data[row].icon 
        });
    }
    $("#current_visit").html( $("#tmpl-current-user").tmpl( user_list ) );

    // 이하생략

});
</script>