'개발/서버'에 해당되는 글 10건
- 2012/03/18 SO_REUSEADDR 은 bind 전에 해야한다.
- 2012/03/17 ConnectEx, WSAINVAL(10022) 발생
- 2012/01/19 asp.net javascript 와 ashx 를 이용한 깜박임 없는 페이지 제작기
- 2011/12/29 URL rewriter 강좌 링크
- 2011/10/25 iis 기본문서 설정을 web.config 에서
- 2011/09/08 Spin Lock 기술 (8)
- 2011/08/30 GetLastError() 10013
- 2011/07/15 URL rewriting
- 2011/06/07 Microsoft SQL Server 2008 R2 RTM - Express with Management Tools
- 2011/03/31 서버종료시 메모리 회수 왜이케 안되...
SO_REUSEADDR 은 bind 전에 해야한다.
개발/서버 2012/03/18 01:28
bind 후에 하니 효과가 없습니다.
빨리할 수 록 좋습니다.
어떤 옵션(?)들은 bind 한 다음에 해야 한다는 군요.
빨리할 수 록 좋습니다.
어떤 옵션(?)들은 bind 한 다음에 해야 한다는 군요.
ConnectEx, WSAINVAL(10022) 발생
개발/서버 2012/03/17 21:28
ConnectEx 하려는 소켓은 bind 되어있어야합니다.
bind 한 다음 ConnectEx 하세요
bind 한 다음 ConnectEx 하세요
asp.net javascript 와 ashx 를 이용한 깜박임 없는 페이지 제작기
개발/서버 2012/01/19 01:20
ajax 는 javascript 와 xml 을 이용한 데이터 교환인데
요즘은 xml 보다 json 을 더 많이 쓴다.. ajaj 라고 해야하나...
.ashx 는 asp.net 의 페이지 생성 방식중 하나이면 매우 간략하게 생성한다.
.aspx 처럼 init -> preload -> load -> ... 이 아니라 요청(req) 에 대한 응답(res) 만 존재하는 방식이다.
asp.net 의 ajax.net 을 이용하고 update panel 을 사용하면 간단하게 코딩할 수 있을지 모르나
나는 이런것에 관심이 없다.
html5 로 아이폰에서도 되는 게임을 제작하는게 목표히기 때문이다.
http://thisisone.me 를 업데이트 해서 완성해갈 생각이다.
참고 사이트:
1. http://msdn.microsoft.com/ko-kr/library/ms178208(v=vs.80).aspx
이곳에서 표현한 방식은 aspx 를 이용해야한다. 그래서 원하는 결과가 아니므로 버렸다.
2. http://www.devcurry.com/2010/11/call-aspnet-handler-ashx-using.html
결과적으로 이곳을 참고 했으며 최종적으로 form 이라는 테그를 제거했다.
그래서 제작한 페이지에는 form 존재하지 않으며 확장자는 .html 이다. 즉 페이지 랜더링을 위해
서버 자원을 사용하지 않는다.(성능에 좋으려나? 확신은 없다)
3. http://blog.outsider.ne.kr/257
.ashx 에서 전송되는 데이터는 text 이다 이것을 javascript 에 맞게 json 형식으로 읽어야 한다.
이 페에서는 eval 방식으로 쉽게 읽는 법과 json2.js 라는 자바스크립트를 이용해 안전하게
json 으로 변환하는 방법을 제공한다.
현재 이곳에 링크된 http://json.org/json2.js 파일은 링크가 끊긴 상태이다.
4. http://najsulman.tistory.com/598
json2.js 를 다운받은 사이트이다.
내일부터는 html5 와 asp.net 을 이용한 원초적인 사이트 제작을 시작한다.
요즘은 xml 보다 json 을 더 많이 쓴다.. ajaj 라고 해야하나...
.ashx 는 asp.net 의 페이지 생성 방식중 하나이면 매우 간략하게 생성한다.
.aspx 처럼 init -> preload -> load -> ... 이 아니라 요청(req) 에 대한 응답(res) 만 존재하는 방식이다.
asp.net 의 ajax.net 을 이용하고 update panel 을 사용하면 간단하게 코딩할 수 있을지 모르나
나는 이런것에 관심이 없다.
html5 로 아이폰에서도 되는 게임을 제작하는게 목표히기 때문이다.
http://thisisone.me 를 업데이트 해서 완성해갈 생각이다.
참고 사이트:
1. http://msdn.microsoft.com/ko-kr/library/ms178208(v=vs.80).aspx
이곳에서 표현한 방식은 aspx 를 이용해야한다. 그래서 원하는 결과가 아니므로 버렸다.
2. http://www.devcurry.com/2010/11/call-aspnet-handler-ashx-using.html
결과적으로 이곳을 참고 했으며 최종적으로 form 이라는 테그를 제거했다.
그래서 제작한 페이지에는 form 존재하지 않으며 확장자는 .html 이다. 즉 페이지 랜더링을 위해
서버 자원을 사용하지 않는다.(성능에 좋으려나? 확신은 없다)
3. http://blog.outsider.ne.kr/257
.ashx 에서 전송되는 데이터는 text 이다 이것을 javascript 에 맞게 json 형식으로 읽어야 한다.
이 페에서는 eval 방식으로 쉽게 읽는 법과 json2.js 라는 자바스크립트를 이용해 안전하게
json 으로 변환하는 방법을 제공한다.
현재 이곳에 링크된 http://json.org/json2.js 파일은 링크가 끊긴 상태이다.
4. http://najsulman.tistory.com/598
json2.js 를 다운받은 사이트이다.
내일부터는 html5 와 asp.net 을 이용한 원초적인 사이트 제작을 시작한다.
URL rewriter 강좌 링크
개발/서버 2011/12/29 16:40
iis 기본문서 설정을 web.config 에서
개발/서버 2011/10/25 11:18
iis 배포시 자꾸 기본문서 설정이 날아가길레
확인했더니 web.config 에 그냥 쓰는거 였구나..
http://najsulman.tistory.com/tag/Web.Config%20%EA%B8%B0%EB%B3%B8
확인했더니 web.config 에 그냥 쓰는거 였구나..
http://najsulman.tistory.com/tag/Web.Config%20%EA%B8%B0%EB%B3%B8
Spin Lock 기술
개발/서버 2011/09/08 00:47
제가 쓴 포스팅은 lockless 가 아니고 spin lock 기술이라고 합니다.
익명님의 지적 감사드립니다.(아무도 관심안가져줄꺼라 생각했어요)
lockless 관련정보: http://xster.tistory.com/tag/Lockless
spinlock 관련정보: http://devnote.tistory.com/142
spinlock 은 lock 을 걸어야할 자리에 for 문으로 무한루프를 걸어 "내가 써도되?" 하고 확인 하는 방식을 말합니다.
출처에는 윈도우즈에서는 cpu 100% 를 먹을 수 있기 때문에 비효율적이라고 하는군요.
아래부터 머신사이클 이란 용어를 사용하는데 이는 제 개인적인 단위 입니다.
(cpu 가 아무리 빨라져도 변함없는 처리단위 라고 생각합니다.)
mutex 는 5,000 머신사이클
criticalsection 은 2,500 머신사이클
정도로 생각하고 있습니다.
사용할 수 있을때 까지 while(1) 무한루프를 걸어 다 썼는지 확인후 사용하도록 수정합니다.
이 방법은 멀티코어가 아니면 sleep 이 없기 때문에 쓰레드 전환이 발생할때까지 block 됩니다.
싱글코어에서는 테스트가 거의 불가능합니다.(cpu 를 혼자 다 먹어버리기 때문에 뻗은것 처럼 보입니다.)
요즘 서버는 16 ~ 32 코어 정도 되기 때문에 이젠 쓰는게 이득인 기술입니다.
2007년 당시에 겨우 2코어 제품이 보급되었기 때문에 "오~" 정도로 끝났었습니다.
이젠 대부분의 서버 기술자가 아는 방식이라 새로울 것도 없죠..
대충 작성한 코드 올려봅니다.(아직 테스트 전입니다.)
<보편적인 CS 클래스>
class CSLock
{
private:
CRITICAL_SECTION m_cs;
public:
CSLock();
~CSLock();
void Enter();
void Leave();
};
//------------------------------------------
//
CSLock::CSLock()
{
::InitializeCriticalSection(&m_cs);
}
CSLock::~CSLock()
{
::DeleteCriticalSection(&m_cs);
}
void CSLock::Enter()
{
::EnterCriticalSection(&m_cs);
}
void CSLock::Leave()
{
::LeaveCriticalSection(&m_cs);
}
<Lock-Free 클래스>
class LFLock
{
private:
long m_threadid;
long m_spin;
public:
LFLock();
~LFLock();
void Enter();
void Leave();
};
//------------------------------------------
//
LFLock::LFLock()
{
m_threadid = 0;
m_spin = 0;
}
LFLock::~LFLock()
{
m_threadid = 0;
m_spin = 0;
}
void LFLock::Enter()
{
long tid = (long)GetCurrentThreadId();
while(1)
{
//lock 이 걸려있지 않은 경우
if(0 == ::InterlockedCompareExchange(&m_threadid, tid, 0))
{
::InterlockedIncrement(&m_spin);
break;
}
//lock 이 걸려있지만 thread 가 같다면
if(tid == ::InterlockedCompareExchange(&m_threadid, tid, tid))
{
::InterlockedIncrement(&m_spin);
break;
}
}
}
void LFLock::Leave()
{
long tid = (long)GetCurrentThreadId();
while(1)
{
if(tid == ::InterlockedCompareExchange(&m_threadid, tid, tid))
{
if(0 == ::InterlockedDecrement(&m_spin))
{
::InterlockedCompareExchange(&m_threadid, 0, tid);
}
break;
}
}
}<성능 테스트 결과>테스트 조건:
for(int i=0; i<천만번; i++
{
m_lock->Enter();
g_count++;
m_lock->Leave();
}
함수를 thread 갯수에 변화를 주어 계산했습니다.
테스트 환경은 : Intel Core2Duo 2.53Ghz (코어2개 입니다.) 로 했습니다.
| 1thread | 2thread | 3thread | |
| CriticalSection | 0.411 | 0.720 | 0.767 |
| CS.SpinCount(1000) | 0.414 | 1.010 | 1.001 |
| 제가만든 SPLock | 0.894 | 1.869 | 2.379 |
CS.SpinCount(1000) 은 InitializeCriticalSectionAndSpinCount() 로 생성한 CriticalSection 입니다.
결론은
1. 제가 만든 SPLock 은 형편없이 느렸습니다.
2. 그리고 CriticalSection 이 상당히 빠르군요.
3. CS.SpinCount(1000) 역시 느리게 나왔습니다.
Debug 빌드에서는 CS.SpinCount(1000) 이 CriticalSection 에 비해 30%정도 빠르게 나왔습니다.
Debug 빌드라 테스트는 따로 해보지 않았지만 이상한 현상이군요.
제가만든게 SPLock 이 왜 느린지 확인해 보니 Interlocked 함수들 자체가 EnterCriticalSection 함수보다 2배가량 느렸습니다.
MS 에서는 이미 Lock 을 제대로 만든것 같습니다.
이 결과에 책임을지고 [저는 MS 신봉자]가 되어야 겠습니다.
너무 허무하군요...
GetLastError() 10013
개발/서버 2011/08/30 18:18
WSAEACCES
액세스 권한에 의해 숨겨진 소켓에 액세스를 시도했습니다.
bind() 호출시 발생함.
디버깅중 서버를 여러번 껏다켰다하면 유령 LISTENING 소켓이 발생하여 bind 할 수 없음
서버 소켓을 bind() 하기전에 SO_REUSEADDR 을 사용하자.
액세스 권한에 의해 숨겨진 소켓에 액세스를 시도했습니다.
bind() 호출시 발생함.
디버깅중 서버를 여러번 껏다켰다하면 유령 LISTENING 소켓이 발생하여 bind 할 수 없음
서버 소켓을 bind() 하기전에 SO_REUSEADDR 을 사용하자.
int ret = 0;
BOOL on = TRUE;
on = TRUE;
ret = setsockopt(
Handle(),
SOL_SOCKET,
SO_REUSEADDR,
(char*)&on, sizeof(on)
);
if(0 != ret) {
LastError("setsockopt(SO_REUSEADDR)");
return false;
}
순서는 bind() 전에 사용할것!
이부분은 헛갈린다
순서는 bind() 전에 사용할것!
이부분은 헛갈린다
URL rewriting
개발/서버 2011/07/15 11:22
잘정리된 링크: http://www.addedbytes.com/for-beginners/url-rewriting-for-beginners/
[기존]
http://www.a.com/a.html?product_id=7
보통 이런 방식을 사용하는걸
[변경후]
http://www.a.com/product_id/7
이런식으로 변경하자는 이야기
1. 이유로는 phone? 에서 읽기 힘들다 - URL 이 너무 길다
2. 검색엔진이 product_id=7 이 라고 저장했더라도 다시 와보면 다를 수 있다는 것 (제가 잘못 이해했을 수 있음)
3. 내용엔 없지만 사용자에게 a.html 이 존재한다는 사실을 알려주고 싶지 않기 때문이기도 한것 같습니다.
URL 줄이는건 아무튼 좋은 일이라 판단됩니다. Web API 랑도 잘 맞구요
구글앱엔진의 자바 서블릿(web.xml) 을 써보면서 방식이 얼마나 편한지 알 수 있었습니다.
MS 제품만 많이 썼더니 다른 언어쪽이 얼마나 발전했는지 알지못했군요
연관기술 : REST HTTP, IIRF rewriter
[기존]
http://www.a.com/a.html?product_id=7
보통 이런 방식을 사용하는걸
[변경후]
http://www.a.com/product_id/7
이런식으로 변경하자는 이야기
1. 이유로는 phone? 에서 읽기 힘들다 - URL 이 너무 길다
2. 검색엔진이 product_id=7 이 라고 저장했더라도 다시 와보면 다를 수 있다는 것 (제가 잘못 이해했을 수 있음)
3. 내용엔 없지만 사용자에게 a.html 이 존재한다는 사실을 알려주고 싶지 않기 때문이기도 한것 같습니다.
URL 줄이는건 아무튼 좋은 일이라 판단됩니다. Web API 랑도 잘 맞구요
구글앱엔진의 자바 서블릿(web.xml) 을 써보면서 방식이 얼마나 편한지 알 수 있었습니다.
MS 제품만 많이 썼더니 다른 언어쪽이 얼마나 발전했는지 알지못했군요
연관기술 : REST HTTP, IIRF rewriter
Microsoft SQL Server 2008 R2 RTM - Express with Management Tools
개발/서버 2011/06/07 23:29
서버종료시 메모리 회수 왜이케 안되...
개발/서버 2011/03/31 02:37
서버 종료시 메모리회수가 제대로 안되네...
일단 버리고 기능이나 구현해야지...
-------- 추가-----------
if - continue 문장에 가려 메모리를 delete 하지 않고 넘어가는 코드가 발견됨 ㅠㅠ
일단 버리고 기능이나 구현해야지...
-------- 추가-----------
if - continue 문장에 가려 메모리를 delete 하지 않고 넘어가는 코드가 발견됨 ㅠㅠ
while(m_message.size() > 0)
{
auto msg= m_messages.front();
m_messages.pop_front();
//여기까진 좋았는데...
if(!msg)
continue;
// 이거때문
if(msg->islive() == false)
continue;
msg->process();
delete msg);
}


